18实现C++ STL顺序容器vector-代码

实现C++ STL顺序容器vector -- 代码

下述代码缺少容器的空间配置器

#include<iostream>
using namespace std;

template<typename T>
class vector {
private:
	T* _first;  //数组起始位置
	T* _last; //数组有效元素的后继位置
	T* _end;  //数组空间的后继位置
	void resize()
	{
		int size = _end - _first;
		T* _tmp = new T[size * 2];
		for (int i = 0; i < size; i++)
		{
			_tmp[i] = _first[i];
		}
		delete[]_first;
		_first = _tmp;
		_end = _first + size * 2;
		_last = _first + size;
	}
public:
	vector<T>(int size = 4)
	{
		_first = new T[size];
		_last = _first;
		_end = _first + size;
	}
	~vector<T>()
	{
		delete[]_first;
		_end = _last = _first = nullptr;
	}
	vector<T>(const vector<T>& rhs)
	{
		int size = rhs._end - rhs._first;
		int len = rhs._last - rhs._first;
		_first = new T[size];
		for (int i = 0; i < len; i++)
		{
			_first[i] = rhs._first[i];
		}
		_last = _first + len;
		_end = _first + size;
	}
	vector<T> operator=(const vector<T>& rhs)
	{
		if (this == &rhs)
		{
			return *rhs;
		}
		delete[]_first;
		int size = rhs._end - rhs._first;
		int len = rhs._last - rhs._first;
		_first = new T[size];
		for (int i = 0; i < len; i++)
		{
			_first[i] = rhs._first[i];
		}
		_last = _first + len;
		_end = _first + size;
	}
	void push_back(const T &rhs)//向容器末尾添加元素
	{
		if (full())
		{
			resize();
		}
		*_last++ = rhs;
	}

	T& pop_back()
	{
		if (empty())
		{
			throw "empty";
		}
		return *--_last;
	}

	int full() const
	{
		return _last == _end;
	}

	int empty() const
	{
		return _last == _first;
	}

	int size()const
	{
		return _last - _first;
	}
	int capacity() const
	{
		return _end - _first;
	}
};

int main()
{
	vector<int> vec;
	for (int i = 0; i < 10; i++)
	{
		vec.push_back(rand() % 100);
	}
	cout << vec.capacity() << endl;
	cout << vec.size() << endl;
	while (!vec.empty())
	{
		cout << vec.pop_back() << endl;
	}
	cout << vec.capacity() << endl;
	cout << vec.size() << endl;
	return 0;
}
posted @   二氧化硅21  阅读(6)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示