从 vector[] 得到的不可变项
Posted
技术标签:
【中文标题】从 vector[] 得到的不可变项【英文标题】:immutable item got from vector[] 【发布时间】:2013-01-24 23:03:48 【问题描述】:我对 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);
[] 运算符返回一个引用,为什么代码 sn -p 1 不起作用?代码1中的temp
是副本吗?
【问题讨论】:
这是一个副本。您没有将其声明为参考。 【参考方案1】: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);
【讨论】:
【参考方案2】:code1 中的
temp
是副本吗?
是的。
让它成为这个工作的参考。
stack<T> &temp = myStackVec.at(stackPos);
cout << "removing " << temp.top() << endl;
【讨论】:
【参考方案3】:想一想stack<T> temp
是什么类型。提示:它不是参考。
【讨论】:
以上是关于从 vector[] 得到的不可变项的主要内容,如果未能解决你的问题,请参考以下文章