我是 vector 的新手。
我有两个 vector vector1
和vector2
,它们每个都有两个值。现在,使用这两个 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;
现在,我尝试再次打印
vector1
和vector_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/