基于C++范围的循环,容器是否被复制
C++ range based for loop, is the container copied?
在C++中,允许对容器的每个元素进行迭代(以向量为例(,就像在中一样
vector<CustomObject> container;
//push back some objects in container
for(CustomObject obj : container){
//process obj
}
我有一个关于"for"行为的问题:是否复制了要在for中使用或通过引用访问的容器?
没有复制容器。它是通过引用访问的。但是,对于每个循环,都会复制CustomObject
。编译器可能会对副本进行优化,但这并不能保证。
在本例中,为了防止复制CustomObject
,您应该执行以下操作:for(CustomObject& obj : container)
不复制容器。但是,其中的每个元素都会被复制。您可以通过使用"与"符号指定它来更改此项。即:
for (CustomObject &obj : container) {
// Process obj
}
通常是处理大型集装箱时的最佳决策。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- 将对象的字节复制到数组并再次复制回来是否安全
- 是否可以将不可复制的成员用作使对象不可复制的替代方法?
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 如果这不是类的"复制构造函数",是否可以移动对象?
- 在这种情况下,使用 string_view 是否会导致不必要的字符串复制?
- 为什么复制构造函数不需要检查输入对象是否指向自身?
- 除了 std::vector 之外,是否有一个 std 容器不会复制和销毁作为类的元素?
- 如何检查文件是否复制成功?(便携式解决方案)C++
- 在此示例中,向量是否复制了两次
- 修改时是否复制C++中的字符串
- OpenMP 是否复制私有对象
- STL 集合的插入方法是否复制传递对象的值?
- 继承中的基类是否复制到派生类
- 在结构中复制构造函数:是否复制数组
- 成员初始化列表是否复制字符串C++
- 这是否复制了矢量
- Mat::p ush_back(x) 是否复制 x 元素