修改STL容器的内容是否安全?
Is it safe to modify the contents of STL containers?
这个很基础。
我记得在某个地方看到一个警告(我现在找不到),大意是你不应该直接修改STL容器的内容,因为它可能会破坏容器的内部记录保存。由此可见,只要有需要修改的元素,就应该使用boost的ptr_containers之类的东西。
这就是我想要做的:
int main (int argc, char *argv[]) {
std::vector<int> jambone;
jambone.push_back(2);
jambone.front() = 4;
std::cout<< jambone.front();
}
我并没有试图在这里用多线程或任何东西做任何奇怪的事情。应该没问题,对吧?如果它是一个充满对象的容器,并且我对其中一个对象调用了mutator,会有什么不同吗?
我想你对更新容器的两件事感到困惑:
-
std::set
更新值是不安全的,因为这会改变不变量(看看当你修改std::set的元素时会发生什么?) -
对于某些容器,特别是
std::vector
,如果操作(如push_back
)使迭代器无效,并且使用的是操作之前获得的迭代器,则必须小心。
以你的情况,我看不出你所做的有什么问题。
相关文章:
- 通过网络、跨平台传递std::变体是否安全
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 跨 DLL 边界访问虚拟方法是否安全/可能?
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 在函数结束后使用指向变量的指针是否安全?
- 逐字节删除 void* 是否安全?
- 在 RAII 构造中修改 RVO 值是否安全?
- 线程调用的函数对对象删除是否安全?
- 将对象的字节复制到数组并再次复制回来是否安全
- 使用枚举为数组编制索引是否安全?
- 返回从字符串文本创建的静态string_view是否安全?
- 在cstlib中将#include_next替换为#include是否安全
- 由并发无序映射查找线程调用的函数是否安全?
- 使用 c++ 原子时编写"y=++x"是否安全?
- 从另一个线程发出信号是否安全?
- 从其存储的回调中删除 std::函数是否安全
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- 当我在C++中调用 struce 的只读静态成员时,线程是否安全
- 同时调用 ASIO 对象的 API 是否安全?
- 使用自己的迭代器分配容器是否安全?