我是 vector 的新手。

我有两个 vector vector1vector2,它们每个都有两个值。现在,使用这两个 vector ,我制作了一个二维 vector vector_2d,我想打印其值(内容)。我使用下面的代码,一切正常。

vector<int> vector1;
vector<int> vector2;

vector1.push_back(10);
vector1.push_back(20);

vector2.push_back(100);
vector2.push_back(200);

vector_2d.push_back(vector1);
vector_2d.push_back(vector2);

cout<<"The elements in vector_2d are: "<<vector_2d.at(0).at(0)<<" "<<vector_2d.at(0).at(1)<<" "<<vector_2d.at(1).at(0)<<" "<<vector_2d.at(1).at(1)<<endl;

现在,我想将vector1中的第一个值(即10)替换为1000。我通过一个简单的赋值运算符来做到这一点:
vector1.at(0) = 1000;

现在,我尝试再次打印vector1vector_2d。我得到了vector1期望的结果:
cout<<vector1.at(0)<<endl; //1000

但是,当我打印vector_2d时,得到的结果与以前相同。 vector1中所做的更改未反射(reflect)在2D vector 中。为什么会这样呢?

最佳答案

2D vector 中的值不会更改,因为在推回1D vector 时

vector_2d.push_back(vector1);
vector_2d.push_back(vector2);

您制作了每个副本。因此,更改vector1中的值不会更改存储为vector_2d元素0的副本中的值。如果要更改2D vector 中的值,可以直接执行以下操作:
vector_2d.at(0).at(0) = 0;

在您的问题的注释中提到了另一种可能性(例如具有指针或引用的 vector ),但由于可能的内存冲突(例如,如果您的2D vector 的生存时间比被引用的1D vector 的生存时间长),我不建议您这样做。

关于c++ - 为什么 vector 变化未反射(reflect)在2D vector 中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59087443/

10-11 18:45