在类中操作向量的成员

Manipulate members of vector in class

本文关键字:成员 向量 操作      更新时间:2023-10-16

我正在开始写作课程,有以下问题。假设我有以下类:

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 foo_cont
{
private:
    vector<foo> foo_vec;
public:
    foo_cont(){}
    void add_element(foo f1){foo_vec.push_back(f1);}
};

假设我制作了一个foo_cont f1;的instace,并用foo实例填充foo_vec它。如何使用set_bar()修改foo_vec的元素?

编辑:由于我对堆栈溢出很陌生,这可能是一个非常愚蠢的问题,但为什么我会得到反对票?

您可以为类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 );
在任何情况下,如果要在

类范围之外更改向量的元素,则需要为它们提供访问器。

如何使用 set_bar() 修改foo_vec元素?

课堂内部foo_cont

如果要在 foo_cont 中向量的第一个元素上调用 set_bar() ,请使用:

foo_vec[0].set_bar(10);

如果要在 foo_cont 中向量的 n -th(按索引)元素上调用 set_bar(),请使用:

foo_vec[n].set_bar(10);

由类的用户

您可以通过运算符函数或通过向量本身提供访问器函数来提供对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();