从 vector[] 获取的不可变项

immutable item got from vector[]

本文关键字:不可变 获取 vector      更新时间:2023-10-16

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

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 不起作用?代码 1 中的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);

代码 1 中的temp是副本吗?

是的。

让它成为它工作的参考。

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

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