vector深拷贝和浅拷贝
时间: 2023-10-23 08:11:04 浏览: 639
完成拷贝功能的构造函数-c++ 教程 谭浩强
在C++中,vector是一个动态数组,它的数据是保存在堆上的。当对一个vector进行拷贝操作时,会出现深拷贝和浅拷贝的问题。
浅拷贝是指将原vector中的指针成员变量的地址拷贝给目标vector,这样两个vector指向的是同一个地址,对其中一个进行修改操作,另一个也会受到影响。
深拷贝是指在拷贝vector时,会重新分配一块内存来存储数据,并将原vector的数据复制到新的内存空间中,这样两个vector的内存地址是不同的,修改其中一个不会影响另一个。
下面是一个浅拷贝的例子:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v1 = {1, 2, 3};
vector<int> v2 = v1; // 浅拷贝
v1[0] = 10;
cout << v2[0] << endl; // 输出结果为10
return 0;
}
```
下面是一个深拷贝的例子:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v1 = {1, 2, 3};
vector<int> v2(v1.begin(), v1.end()); // 深拷贝
v1[0] = 10;
cout << v2[0] << endl; // 输出结果为1
return 0;
}
```
需要注意的是,对于自定义数据类型的vector,需要自己实现拷贝构造函数和赋值运算符重载函数来避免浅拷贝的问题。
阅读全文