一、vector深度剖析及模拟实现


模拟实现源代码
#include <assert.h>
#include <iostream>
using namespace std;
namespace jyr {
template <class T>
class vector
{
public:
typedef T* iterator;
typedef const T* const_iterator;
vector()
{}
vector(size_t n, const T& val = T())
{
reserve(n);
for (size_t i = 0; i < n; i++)
{
push_back(val);
}
}
// [first, last) 左必右开区间
template <class InputIterator>
vector(InputIterator first, InputIterator last)
{
while (first != last)
{
push_back(*first);
++first;
}
}
//v2(v1)深拷贝
// vector(const vector<T>& v)
// {
// _start = new T[v.capacity()];
// //memcpy(_start, v._start, sizeof(T)*v.size());//浅拷贝
// for (size_t i = 0; i < v.size(); ++i)
// {
// _start[i] = v._start[i];//当vector<vector<int>>时,是一个二维数组,没写赋值重载,是一个浅拷贝,需要再写赋值重载
// }
//
// _finish = _start + v.size();
// _end_of_storage = _start + v.capacity();
// }
vector(const vector<T>& v)
{
vector<T> tmp(v.begin(), v.end());//借助迭代器拷贝来把v中的数据全部拷贝进tmp中
swap(tmp);//tmp和this交换数据即可实现二维v2(v1)深拷贝
}
vector<T>& operator=(vector<T> v)
{
swap(v);//this和形参v交换,交换后的v因为是形参所以不会改变
return *this;
}
void swap(vector<T>& v)
{
std::swap(_st