#include <iostream>
template<typename T>
class vector {
public:
typedef T value; //值
typedef T* iterator; //迭代器
typedef T& referance;//引用
public:
vector(int len = 0) :capicity(len), pos(0),m_data(nullptr),start(nullptr) {
if (len > 0) {
m_data = new value[capicity];
start = m_data;
}
}
~vector() {
delete[]m_data;
}
//压入数据push_back
void push_back(const value& v) {
//如果size没有达到capicity,则直接加
if (capicity != pos) {
*(start + pos) = v;
pos++;
}else {//否则越界
std::cout << "越界了\n";
}
}
//取出数据pop_back
inline value pop_back() {
--pos;
return *(start + pos);
}
//vector大小
int size() {
return capicity;
}
iterator begin() {
return this->start;
}
iterator end() {
return this->start + pos;
}
value operator[](int n) {
if (n < pos) {
return *(start +n);
}else {
std::cout << "越界了\n";
}
}
protected:
iterator m_data; //当前数组
iterator start; //开始位置迭代器
int capicity; //容量
int pos; //当前大小
};
template<typename T>
std::ostream&operator<<(std::ostream&out, vector<T>&vec) {
for (int i = 0; i < vec.size(); i++) {
out << vec[i] << " ";
}
return out;
}
int main()
{
vector<int>vec(10);
for (int i = 0; i < vec.size(); i++) {
vec.push_back(i+10);
}
std::cout << vec;
//for (vector<int>::iterator it = vec.begin(); it != vec.end(); it++) {
// std::cout << *it << " ";
//}
}