0

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

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

此代码不修改myStackVec

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

此代码确实通过修改myStackVec进行修改temp

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

[] 运算符返回一个引用,为什么代码片段 1 不起作用?temp代码1中有副本吗?

4

3 回答 3

3
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);
于 2013-01-24T23:08:40.073 回答
2

temp代码1中有副本吗?

是的。

让它成为这个工作的参考。

stack<T> &temp = myStackVec.at(stackPos);
cout << "removing " << temp.top() << endl;
于 2013-01-24T23:05:50.943 回答
2

想一想什么是类型stack<T> temp。提示:它不是参考。

于 2013-01-24T23:06:02.390 回答