C++初阶vector(下)
Posted Huang_ZhenSheng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++初阶vector(下)相关的知识,希望对你有一定的参考价值。
目录
拷贝
传统写法:
//v2(v1)
//第一种传统写法
vector(const vector<T>& v)
//开一块空间
_start = new T[v.capacity()];
//拷贝有效数据过去
memcpy(_start, v._start, sizeof(T)*v.size());
_finish = _start + v.size();
_endofstorage = _start + v.capacity();
//第二种传统写法
vector(const vector<T>& v)
:_start(nullptr)
, _finish(nullptr)
, _endofstorage(nullptr)
//一次性把空间给开好
reserve(v.capacity());
//遍历v1,把v1的数据插入到v2,插入push_back会自己开空间
for (const auto& e : v)
push_back(e);
现代写法:
//v2(v1)
//现代写法
//类模板的成员函数,还可以在定义模板参数
template<class InputIterator>
vector(InputIterator first, InputIterator last)
:_start(nullptr)
, _finish(nullptr)
, _endofstorage(nullptr)
while (first != last)//左闭右开[ )
push_back(*first);
first++;
vector(const vector<T>& v)
:_start(nullptr)
, _finish(nullptr)
, _endofstorage(nullptr)
vector<T>tmp(v.begin(), v.end());
this->swap(tmp);//v1和tmp交换
void swap(vector<T>& v)
std::swap(this->_start,v._start);
std::swap(this->_finish,v._finish);
std::swap(this->_endofstorage,v._endofstorage);
完成了深拷贝————>
赋值
传统写法:
//v1 = v4
//传统写法
vector<T>& operator = (const vector<T>& v)
if (this ! = &v)
delete[] _start;//释放掉之前的空间
_start = _finish = _endofstorage = nullptr;
//开跟你v4一样大的空间
reserve(v.capacity());
//遍历v4,插入数据
for (const auto& e : v)
push_back(e);
return *this;
现代写法:
//v1 = v4
//现代写法
vector<T>& operator = (vector<T> v)//直接使用传值
swap(v);
return *this;
以上是关于C++初阶vector(下)的主要内容,如果未能解决你的问题,请参考以下文章