我对 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/