#include <iostream>
using namespace std;
template <typename T>
class MyVector
{
private:
T* first;
T* last;
T* end;
public:
MyVector() {}
MyVector(int size) : first(new T(size)) {
last = first;
end = first + size;
}
~MyVector() {
cout << "析构" << endl;
}
MyVector(const MyVector<T>& p) {
int len = p.last - p.first;
int size = p.end - p.first;
this->first = new T[size];
memcpy(this->first, p.first, len * sizeof(T));
this->last = this->first + len;
this->end = this->first + size;
}
MyVector& operator=(const MyVector<T>& p) {
this->first = p.first;
this->last = p.last;
this->end = p.end;
}
T& at(int n) {
int size = last - first;
if (n > size || n < 0) {
return NULL;
}
return first[n];
}
bool empty() {
return this->first == this->last;
}
bool full() {
return this->last == this->end;
}
T& front()const {
return *first;
}
T& back()const {
return *(last - 1);
}
int size() {
return last - first;
}
void clear() {
last = first;
}
void expand() {
int size2 = this->end - this->first;
T* temp = new T[2 * size2];
memcpy(temp, this->first, size2 * sizeof(T));
delete[]first;
first = temp;
last = first + size2;
end = first + 2 * size2;
}
void push_back(const T val) {
if (this->full()) {
this->expand();
}
*last = val;
last++;
}
void pop_back() {
if (this->empty()) {
return;
}
--last;
}
void display() {
T* mid = first;
while (mid < last) {
cout << *mid << " ";
mid++;
}
cout << endl;
}
};
int main()
{
MyVector<int> my_01(5);
my_01.display();
my_01.push_back(5);
my_01.display();
my_01.push_back(10);
my_01.display();
my_01.push_back(12);
my_01.display();
my_01.pop_back();
my_01.display();
return 0;
}
C++实现vectors
最新推荐文章于 2024-10-08 12:54:42 发布