C++如何拷贝一个vector
时间: 2024-08-17 09:02:15 浏览: 56
在C++中,你可以使用多种方法来复制一个`std::vector`:
1. **浅拷贝**(Shallow Copy):如果vector中元素是基本数据类型(如int、char等),或者是值类型,那么对vector本身的引用进行赋值就可以完成浅拷贝,因为它们本身就是直接存储的。
```cpp
std::vector<int> original(5); // 创建一个包含5个0的vector
std::vector<int> copied = original; // 这里就是浅拷贝
```
2. **深拷贝**(Deep Copy):对于容器内的复杂对象(比如另一个vector),需要逐个复制每个元素。可以使用`std::copy`函数配合迭代器来实现。
```cpp
std::vector<std::vector<int>> nested(5);
// ...填充nested
std::vector<std::vector<int>> copiedNested;
copiedNested.reserve(nested.size());
for (const auto& subVector : nested) {
copiedNested.push_back(subVector);
}
```
3. **标准库提供的深拷贝构造函数**(如果vector内部元素有默认复制构造函数):对于自定义类型,可以利用标准库提供的深拷贝构造函数进行复制。
```cpp
struct CustomType {
// ...
};
std::vector<CustomType> customVector;
// ...
std::vector<CustomType> copiedCustomVector(customVector); // 使用深拷贝构造函数
```
4. **移动构造函数**(Move Construction):当性能至关重要时,可以使用move constructor进行高效复制。但这仅适用于不可移动的资源,如unique_ptr类型的元素。
```cpp
std::vector<std::unique_ptr<int>> moveVector;
// ...
std::vector<std::unique_ptr<int>> movedVector(moveVector); // 使用move constructor
```
阅读全文