代码实现
/*vector类简单实现*/
#if 1
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <crtdbg.h>
#include <assert.h>
#include <string.h>
namespace MyVector {
template<class T>
class vector {
public:
typedef T* iterator;
public:
vector()
: _start(nullptr)
, _finish(nullptr)
, _endofstorage(nullptr)
{}
vector(int n, const T& val = T())
: _start(new T[n]) {
//memset(_start, val, sizeof(T)*n);
for (int i = 0; i < n; ++i) {
_start[i] = val;
}
_finish = _start + n;
_endofstorage = _finish;
}
template<class Iterator>
vector(Iterator first, Iterator last) {
// size_t n = last - first; //注意:一定不能减
Iterator it = first;
size_t n = 0;
while (it != last) {
n++;
++it;
}
_start = new T[n];
_finish = _start;
while (first != last) {
*_finish++ = *first++;
// _finish++;
// first++;
}
_endofstorage = _finish;
}
vector(const vector<T>& v)
: _start(new T[v.size()]) {
size_t n = v.size();
for (size_t i = 0; i < n; ++i) {
_start[i] = v[i];
}
_finish = _start + n;
_endofstorage = _finish;
}
vector<T>& operator=(vector<T> v) {
swap(v);
return *this;
}
~vector() {
if (_start) {
delete[] _start;
_start = _finish = _endofstorage = nullptr;
}
}
/////////////////////////////////////////////////
// 迭代器
iterator begin() {
return _start;
}
iterator end() {
return _finish;
}
iterator rbegin() {
return end();
}
iterator rend() {
return begin();
}
////////////////////////////////////////////////////
// 容量
size_t size()const {
return _finish - _start;
}
size_t capacity()const {
return _endofstorage - _start;
}
bool empty()const {
return _start == _finish;
}
void resize(size_t newsize, const T& val = T()) {
size_t oldsize = size();
if (newsize > oldsize) {
size_t oldcap = capacity();
if (newsize > oldcap)
reserve(newsize);
for (size_t i = oldsize; i < newsize; ++i) {
_start[i] = val;
}
}
_finish = _start + newsize;
}
void reserve(size_t newcap) {
size_t oldcap = capacity();
size_t count = size();
if (newcap > oldcap) {
// 1. 申请新空间
T* temp = new T[newcap];
if (_start) {
// 2. 拷贝元素
// 浅拷贝
// memcpy(temp, _start, sizeof(T)*count);
for (size_t i = 0; i < count; ++i) {
temp[i] = _start[i];
}
// 3. 释放旧空间
delete[] _start;
}
_start = temp;
_finish = _start + count;
_endofstorage = _start + newcap;
}
}
////////////////////////////////////////////////
// 元素访问
T& front() {
// return *begin();
return _start[0];
}
const T& front()const {
return _start[0];
}
T& back() {
return *(_finish - 1);
}
const T& back()const {
return *(_finish - 1);
}
T& operator[](size_t index) {
// assert(index < size());
return _start[index];
}
const T& operator[](size_t index)const {
// assert(index < size());
return _start[index];
}
//////////////////////////////////////////
// 修改
void push_back(const T& value) {
if (_finish == _endofstorage) {
reserve(size() * 2 + 3);
}
*_finish = value;
++_finish;
}
void pop_back() {
if (empty())
return;
--_finish;
}
iterator insert(iterator pos, const T& value) {
if (pos < _start || pos > _finish)
return end();
if (_finish == _endofstorage)
reserve(2 * size());
// 将pos及其后续所有的元素整体往后搬移
iterator it = _finish;
while (it != pos) {
*it = *(it - 1);
--it;
}
*pos = value;
++_finish;
return pos;
}
iterator erase(iterator pos) {
if (pos < _start || pos >= _finish)
return end();
iterator it = pos + 1;
while (it != _finish) {
*(it - 1) = *it;
++it;
}
--_finish;
return pos;
}
void clear() {
_finish = _start;
}
void swap(vector<T>& v) {
std::swap(_start, v._start);
std::swap(_finish, v._finish);
std::swap(_endofstorage, v._endofstorage);
}
//vector成员变量
private:
iterator _start;
iterator _finish;
iterator _endofstorage;
};
}
void TestVector1() {
MyVector::vector<int> v1;
// int int
MyVector::vect