在 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();