从 vector[] 获取的不可变项
immutable item got from vector[]
我对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
是什么类型。提示:它不是参考。
相关文章:
- 正在寻找C++不可变的hashset/hashmap
- 具有常量属性的不可变类
- 为什么将函数传递给内核会导致数据变得不可变?
- 现代c++编译器会优化不可变的临时变量吗
- C++中的不可变列表
- 如何将地图作为不可变地图传递?
- 不可变的全局对象应该声明为"const my_result_t BLAH"还是"extern const my_result_t BLAH;"?
- 向不可变纹理存储提供数据
- 在C++中创建不可变且高效的类的惯用方法
- std::shared_ptr<std::string const> 可以作为引用计数的不可变字符串的有效实现吗?
- 编写接受可变跨度作为不可变跨度的模板函数
- 可变存储与不可变存储
- 不可变数据模型的内存管理
- 在C++中创建不可变对象的更好方法
- GetFullPathName 不会获取 DLL 路径
- 不推荐获取有关选项 'Gm' 的相关警告
- 如何使用分支逻辑构造不可变数据类型的实例
- GetPrivateprofilestring 不会获取当前目录中的 ini 文件
- 不可变的 lambda 函数:复制捕获的变量是否允许是 const
- C++ 不可变的自定义类按引用或值传递