作业要求:
template <typename T>
class Myvector
{
private:
T * first;
T * last;
T end;
};
要实现的函数: 构造函数 析构函数 拷贝构造 拷贝赋值
at() 、empty()
full()、 front()、back()、size()、clear()、expand()二倍扩容函数、push_back()、pop_back()
template <typename T>
class Myvector
{
public:
//构造函数
Myvector() : frist(nullptr), last(nullptr), end(nullptr) {}
Myvector(int n): frist(new T[n]),last(nullptr),end(frist+n){}
//拷贝构造
Myvector(const Myvector &other)
{
int n = other.size();
frist = new T[n];
last = frist+n;
end = frist+n;
for(int i=0;i<n;i++)
{
frist[i]=other.frist[i];
}
}
//拷贝赋值函数
Myvector& operator=(const Myvector &other)
{
if (this != &other)
{
delete[] frist;
int n = other.size();
this->frist = new T[n];
this->last = frist + n;
this->end = frist + n;
for (int i = 0; i < n; i++)
{
frist[i] = other.frist[i];
}
}
return *this;
}
//析构函数
~Myvector()
{
delete [] frist;
frist = nullptr;
last = nullptr;
end = nullptr;
}
//at()
T &at(int sub)
{
if(sub<0 || sub>=last-frist)
{
cout<<"访问超出范围"<<endl;
}
return frist[sub];
}
//empty()
bool empty() const{return last == frist;}
//full()
bool full() const {return last == end;}
//front()
T& front() {return *frist;}
//back()
T& back() {return *(last-1);}
//size()
int size() const {return last - frist;}
//clear()
void clear() {last = frist;}
//expand()
void expand(int n)
{
int m =size();
T* newfrist = new T[m+n];
for(int i=0;i<m;i++)
{
newfrist[i]=frist[i];
}
delete []frist;
frist = newfrist;
last = newfrist+m;
end = newfrist+m+n;
}
//push_back
void push_back(const T& value)
{
if(full())
{
expand(size());
}
*last++=value;
}
//pop_back
void pop_back()
{
if(!empty())
{
--last;
}
}
private:
T *frist;
T *last;
T *end;
};
文章介绍了如何实现一个名为Myvector的模板类,该类类似于标准库中的std::vector,包括构造函数、析构函数、拷贝构造及赋值运算符、以及at()、empty()、full()、front()、back()、size()、clear()、expand()、push_back()和pop_back()等成员函数,涉及动态内存管理和容器的基本操作。

377

被折叠的 条评论
为什么被折叠?



