基于C++范围的循环,容器是否被复制

C++ range based for loop, is the container copied?

本文关键字:是否 复制 C++ 范围 循环 基于      更新时间:2023-10-16

在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
}

通常是处理大型集装箱时的最佳决策。