vector 等号拷贝
时间: 2023-11-08 08:04:36 浏览: 62
当使用等号进行 vector 的拷贝时,会将原 vector 中的元素逐一复制到新的 vector 中,所以新的 vector 和原 vector 是两个独立的对象。修改其中一个 vector 中的元素不会影响另一个 vector。
例如:
```
vector<int> v1 = {1, 2, 3};
vector<int> v2 = v1; // 使用等号拷贝 v1 到 v2
v2[0] = 4; // 修改 v2 中的第一个元素为 4
cout << v1[0] << endl; // 输出 1,v1 中的第一个元素没有改变
```
注意,使用等号拷贝 vector 时,底层的元素也会被复制,而不是只复制指针。这意味着,如果原 vector 中的元素是指针或类对象,那么拷贝后的新 vector 中也会有同样的指针或类对象。如果这些指针或类对象对应的资源需要手动管理,则需要谨慎使用等号拷贝。
相关问题
vector 浅拷贝
在 C++ 中,当你对一个 vector 进行拷贝操作时,默认情况下是进行的浅拷贝。也就是说,拷贝后的 vector 会与原始 vector 共享相同的元素,而不是创建一个新的副本。
这意味着,如果你修改了其中一个 vector 的元素,另一个 vector 也会受到影响。这是因为它们实际上指向相同的内存位置。
例如:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> original = {1, 2, 3};
std::vector<int> copy = original;
copy[0] = 100;
std::cout << "Original vector: ";
for (int num : original) {
std::cout << num << " ";
}
std::cout << "\nCopied vector: ";
for (int num : copy) {
std::cout << num << " ";
}
return 0;
}
```
输出为:
```
Original vector: 100 2 3
Copied vector: 100 2 3
```
如上例所示,修改拷贝后的 vector 的第一个元素也会影响原始 vector。如果你想要创建一个独立于原始 vector 的副本,可以使用深拷贝或者使用其他方法来实现。
vector 深拷贝
在 C++ 中,要进行 vector 的深拷贝,可以使用拷贝构造函数或者赋值运算符来完成。拷贝构造函数创建一个新的 vector 对象,其内容与原始 vector 相同。赋值运算符将一个 vector 的内容复制到另一个已经存在的 vector 中。
下面是使用拷贝构造函数实现 vector 的深拷贝的示例代码:
```cpp
#include <iostream>
#include <vector>
int main() {
std::vector<int> originalVec {1, 2, 3, 4, 5};
// 使用拷贝构造函数进行深拷贝
std::vector<int> copiedVec(originalVec);
// 修改原始 vector 的元素值
originalVec[0] = 10;
// 输出两个 vector 的内容
std::cout << "Original Vector: ";
for (const auto& num : originalVec) {
std::cout << num << " ";
}
std::cout << std::endl;
std::cout << "Copied Vector: ";
for (const auto& num : copiedVec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
输出结果为:
```
Original Vector: 10 2 3 4 5
Copied Vector: 1 2 3 4 5
```
可以看到,修改原始 vector 的元素并不会影响到被拷贝的 vector,说明进行了深拷贝。
希望能解答到您的问题!如有更多疑问,请随时提出。