std::vector<std::vector<int>>的拷贝赋值
时间: 2024-09-10 11:01:25 浏览: 45
`std::vector<std::vector<int>>` 是一个二维动态数组,它存储的是 `int` 类型的一维向量。在 C++ 中,当你想要拷贝这种嵌套容器时,有两种基本的方式:
1. **浅拷贝(Shallow Copy)**:
如果只是逐个复制外层容器(即二维向量)的引用到新的 `std::vector`,而不复制内部元素(即一维向量及其内容),那么这是浅拷贝。例如:
```cpp
std::vector<std::vector<int>> outer_copy(outer_vec);
```
这里的 `outer_copy` 将拥有与 `outer_vec` 相同数量的一维向量引用,但每个一维向量的内容仍然是原始向量的内容。
2. **深拷贝(Deep Copy)**:
如果你需要完全复制整个结构,包括内部的每一维向量及其内容,你可以使用深拷贝构造函数或者内建的 `copy` 函数配合 `std::copy`:
```cpp
std::vector<std::vector<int>> outer_deep_copy;
outer_deep_copy.resize(outer_vec.size());
for (size_t i = 0; i < outer_vec.size(); ++i) {
outer_deep_copy[i] = outer_vec[i]; // 或者 std::copy(outer_vec[i].begin(), outer_vec[i].end(), outer_deep_copy[i].begin());
}
```
这样,`outer_deep_copy` 就会包含独立于 `outer_vec` 的全新一维向量。
无论哪种情况,注意处理好内存,尤其是当内部向量很大或者有复杂的数据结构时,深拷贝可能会占用较多资源。
阅读全文