std::vector深拷贝
时间: 2023-08-21 14:17:05 浏览: 118
std::vector类模板
在C++中,std::vector是一个动态数组容器,它可以自动调整大小以适应元素的添加和删除。当使用拷贝构造函数或赋值运算符对std::vector进行深拷贝时,会创建一个新的std::vector对象,并将原始对象的元素逐个复制到新对象中。
在拷贝构造函数中,通常会使用另一个std::vector对象作为参数,将其元素复制到新对象中。例如,可以使用以下代码进行深拷贝:
Vector(const Vector<T>& v) : _start(nullptr), _finish(nullptr), _endofstorage(nullptr) {
Vector<T> tmp(v.begin(), v.end());
swap(tmp);
}
在赋值运算符中,也可以使用另一个std::vector对象作为参数进行深拷贝。例如,可以使用以下代码进行深拷贝:
Vector<T>& operator=(Vector<T> v) {
swap(v);
return *this;
}
这种深拷贝的方式可以确保新对象和原始对象是完全独立的,它们拥有各自的内存空间,并且对一个对象的修改不会影响到另一个对象。
除了拷贝构造函数和赋值运算符,std::vector还提供了其他构造函数,如默认构造函数和填充构造函数,它们也可以用于进行深拷贝。例如,可以使用以下代码进行填充构造:
Vector(int n, const T& val = T()) : _start(nullptr), _finish(nullptr), _endofstorage(nullptr) {
reserve(n);
for (size_t i = 0; i < n; ++i) {
push_back(val);
}
}
总结来说,当使用std::vector进行深拷贝时,可以使用拷贝构造函数、赋值运算符或其他构造函数来创建一个新的std::vector对象,并将原始对象的元素逐个复制到新对象中,以确保新对象和原始对象是完全独立的。
#### 引用[.reference_title]
- *1* *2* *3* [[C++](11)vector的使用与模拟实现:迭代器失效,深浅拷贝详细剖析](https://blog.csdn.net/CegghnnoR/article/details/125712783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文