在 class 中操作向量的成员
Manipulate members of vector in class
我开始写 classes 并有以下问题。
假设我有以下 class:
class foo
{
private:
int bar;
public:
foo(int bar): bar(bar){}
void set_bar(int ubar){bar=ubar;}
int get_bar(){return bar;}
};
现在我想写一个包含 foo
实例的 class。
class foo_cont
{
private:
vector<foo> foo_vec;
public:
foo_cont(){}
void add_element(foo f1){foo_vec.push_back(f1);}
};
假设我创建了一个 foo_cont f1;
的实例并用 foo
的实例填充 foo_vec
它。如何将 foo_vec
的元素修改为 set_bar()
?
编辑:
由于我对堆栈溢出还很陌生,这可能是一个非常愚蠢的问题,但为什么我会被否决?
您可以为 class foo_cont
定义 operator []
。例如
class foo_cont
{
private:
vector<bar> foo_vec;
public:
// ...
bar & operator []( size_t i )
{
return foo_vec[i];
}
const bar & operator []( size_t i ) const
{
return foo_vec[i];
}
};
例如
for_cont[i].set_bar( 10 );
在任何情况下,如果您要在 class 范围之外更改它们,则需要为向量的元素提供访问器。
How do I modify the elements of foo_vec with set_bar()?
里面classfoo_cont
如果要在 foo_cont
中的向量的第一个元素上调用 set_bar()
,请使用:
foo_vec[0].set_bar(10);
如果您想在 foo_cont
中向量的第 n
个(按索引)元素上调用 set_bar()
,您可以使用:
foo_vec[n].set_bar(10);
来自 class
的用户
您可以通过运算符函数或为向量本身提供访问函数来提供对 foo_vec
的第 n
个元素的访问。
bar& operator[]( size_t i )
{
return foo_vec[i];
}
bar const& operator[]( size_t i ) const
{
return foo_vec[i];
}
并将其用作:
foo_cont f1;
f1.add_element(10);
int a = f1[0].get_bar();
或
std::vector<foo>& get_foo_vector()
{
return foo_vec;
}
std::vector<foo> const& get_foo_vector() const
{
return foo_vec;
}
并将其用作:
foo_cont f1;
f1.add_element(10);
int a = f1.get_foo_vector()[0].get_bar();
我开始写 classes 并有以下问题。 假设我有以下 class:
class foo
{
private:
int bar;
public:
foo(int bar): bar(bar){}
void set_bar(int ubar){bar=ubar;}
int get_bar(){return bar;}
};
现在我想写一个包含 foo
实例的 class。
class foo_cont
{
private:
vector<foo> foo_vec;
public:
foo_cont(){}
void add_element(foo f1){foo_vec.push_back(f1);}
};
假设我创建了一个 foo_cont f1;
的实例并用 foo
的实例填充 foo_vec
它。如何将 foo_vec
的元素修改为 set_bar()
?
编辑: 由于我对堆栈溢出还很陌生,这可能是一个非常愚蠢的问题,但为什么我会被否决?
您可以为 class foo_cont
定义 operator []
。例如
class foo_cont
{
private:
vector<bar> foo_vec;
public:
// ...
bar & operator []( size_t i )
{
return foo_vec[i];
}
const bar & operator []( size_t i ) const
{
return foo_vec[i];
}
};
例如
for_cont[i].set_bar( 10 );
在任何情况下,如果您要在 class 范围之外更改它们,则需要为向量的元素提供访问器。
How do I modify the elements of foo_vec with set_bar()?
里面classfoo_cont
如果要在 foo_cont
中的向量的第一个元素上调用 set_bar()
,请使用:
foo_vec[0].set_bar(10);
如果您想在 foo_cont
中向量的第 n
个(按索引)元素上调用 set_bar()
,您可以使用:
foo_vec[n].set_bar(10);
来自 class
的用户您可以通过运算符函数或为向量本身提供访问函数来提供对 foo_vec
的第 n
个元素的访问。
bar& operator[]( size_t i )
{
return foo_vec[i];
}
bar const& operator[]( size_t i ) const
{
return foo_vec[i];
}
并将其用作:
foo_cont f1;
f1.add_element(10);
int a = f1[0].get_bar();
或
std::vector<foo>& get_foo_vector()
{
return foo_vec;
}
std::vector<foo> const& get_foo_vector() const
{
return foo_vec;
}
并将其用作:
foo_cont f1;
f1.add_element(10);
int a = f1.get_foo_vector()[0].get_bar();