C++向量指针/引用问题

sub*_*sub 5 c++ pointers vector

请看一下这个例子:

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class mySubContainer
{
public:
    string val;
};

class myMainContainer
{
public:
    mySubContainer sub;
};

void doSomethingWith( myMainContainer &container )
{
    container.sub.val = "I was modified";
}

int main( )
{
    vector<myMainContainer> vec;


    /**
     * Add test data
     */
    myMainContainer tempInst;

    tempInst.sub.val = "foo";
    vec.push_back( tempInst );

    tempInst.sub.val = "bar";
    vec.push_back( tempInst );


    // 1000 lines of random code here

    int i;
    int size = vec.size( );
    myMainContainer current;

    for( i = 0; i < size; i ++ )
    {
        cout << i << ": Value before='" << vec.at( i ).sub.val << "'" << endl;

        current = vec.at( i );
        doSomethingWith( current );

        cout << i << ": Value after='" << vec.at( i ).sub.val << "'" << endl;
    }
    system("pause");//i suck

}
Run Code Online (Sandbox Code Playgroud)

我知道,一个例子的代码很多.

现在你不必花费数年时间思考这应该做什么[es]:我有一个类myMainContainer,它的唯一成员是一个实例mySubContainer.mySubContainer只有一个字符串val作为成员.

所以我创建了一个向量并用一些示例数据填充它.

现在,我想要做的是:迭代向量并创建一个单独的函数,能够修改向量中的当前myMainContainer.但是,矢量保持不变,因为输出告诉:

0: Value before='foo'
0: Value after='foo'
1: Value before='bar'
1: Value after='bar'
Run Code Online (Sandbox Code Playgroud)
  • 我究竟做错了什么?

doSomethingWith必须返回void,我不能让它返回修改后myMainContainer然后只是在向量中覆盖它,这就是为什么我试图通过引用传递它,如上面的doSomethingWith定义所示.

Ale*_*ski 11

你在这里复制矢量:

current = vec.at( i );
Run Code Online (Sandbox Code Playgroud)

和修改current,但打印原件,vec.at(i).

相反,直接修改对象,例如

doSomethingWith(vec[i]);  // or vec.at(i) for checked access.
Run Code Online (Sandbox Code Playgroud)