c++ - 从 vector[] 获得的不可变项

标签 c++ pointers vector reference g++

我对 C++ 中的 vector [] 运算符有疑问。

vector<stack<T>> myStackVec;
ops...
...
...

此代码不修改myStackVec:

stack<T> temp = myStackVec.at(stackPos);
cout << "removing " << temp.top() << endl;

此代码确实通过修改 temp 来修改 myStackVec:

stack<T> *temp = &myStackVec[stackPos];
temp->push(item);

[] 运算符返回一个引用,为什么代码片段 1 不起作用? code1 中的 temp 是拷贝吗?

最佳答案

stack<T> temp = myStackVec.at(stackPos);

将复制堆栈,然后 temp.push_back 将对复制的堆栈进行操作,您需要引用:

stack<T> &temp = myStackVec.at(stackPos);
temp.push_back(item);

或者简单地说:

myStackVec.at(stackPos).push_back(item);

关于c++ - 从 vector[] 获得的不可变项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14512478/

相关文章:

c++ - 如何在 OpenCV 中裁剪圆圈(通过 Hough 变换找到)​​?

c++ - 反转 std::list 的内容

ios - 如何在 touchesBegan : and touchesEnded:? 之间以一致的方式跟踪触摸

c - C 中的二维数组结构

c - 编写一个排序函数对指向结构的指针数组进行排序

c++ - 将 vector 数组作为函数参数传递(值不会改变)

c++ - Qt + MSVC 2015 + Firebase SDK v1.0.0

c++ - 为什么我不能在声明中定义静态字段?

C++/Qt 对象到 vector 并返回到对象

c++ - 如何查找并返回 vector 中的重复序列