从 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&lt;T&gt; temp 是什么类型。提示:它不是参考。

【讨论】:

以上是关于从 vector[] 得到的不可变项的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine 2 中的不可变集合?

具有深度嵌套层次结构的不可变 NSDictionary:更改键的值?

JDK中提供的不可变集合真的做到了不可变吗?

Java中的不可变类

将新的不可变映射值附加到不可变列表

保留插入顺序的不可变 Scala Map 实现