day7_C++
MyVector.h
#ifndef MYVECTOR_H
#define MYVECTOR_H
#include <iostream>
using namespace std;
typedef int size_type;
template<typename TYPE>
class MyVector
{
private:
int num;
TYPE *data;
TYPE * headiterator;
TYPE * enditerator;
public:
//无参构造
MyVector();
//有参构造 数量(num) 和 值(val) - 构造一个初始放入num个值为val的元素的Vector
MyVector(size_type num, const TYPE &val);
//析构函数
~MyVector();
// == 号重载 判断 是否相等
bool operator==(const MyVector &R) const;
//二倍扩容
bool doubleAdd()
{
}
TYPE* insert( TYPE loc, const TYPE &val );
TYPE* end();
TYPE at(int pos);
void show();
};
#endif // MYVECTOR_H
myvector.c
#include "myvector.h"
template<typename TYPE>
MyVector<TYPE>::MyVector()
{}
template<typename TYPE>
MyVector<TYPE>::MyVector(size_type num, const TYPE &val):data(new TYPE[num]),num(num)
{
for(int i = 0;i<num;i++)
{
this->data[i] = val;
}
headiterator = data;
enditerator = data+num;
}
template<typename TYPE>
MyVector<TYPE>::~MyVector()
{
delete []data;
headiterator = nullptr;
enditerator = nullptr;
}
template<typename TYPE>
bool MyVector<TYPE>::operator==(const MyVector &R) const
{
if(this->num == R.num)
{
for(int i = 0;i<this->num;i++)
{
if(this->data[i] != R.data[i])
return false;
}
return true;
}
else
return false;
}
template<typename TYPE>
TYPE* MyVector<TYPE>::end()
{
return enditerator;
}
template<typename TYPE>
TYPE* MyVector<TYPE>::insert( TYPE loc, const TYPE &val )
{
int dataNum = 0;
TYPE* headp = headiterator;
TYPE* endp = enditerator;
while(headp!=endp)
{
++dataNum;
headp++;
}
dataNum+=1;
//未满不扩容
if(dataNum<num)
{
for(int i = dataNum;i>loc;i--)
{
data[i] = data[i-1];
}
data[loc] = val;
//尾迭代往后移动一个
enditerator++;
}
headiterator = new TYPE[num*2];
}
template<typename TYPE>
TYPE MyVector<TYPE>::at(int pos)
{
TYPE* p = headiterator;
p+pos;
return *p;
}
template<typename TYPE>
void MyVector<TYPE>::show()
{
while(data!=enditerator)
{
cout<<*data<<endl;
data++;
}
}