#include <iostream>
#include <vector>
using namespace std;
template <typename T>
class Vector {
private:
int capacity_;
int size_;
T *data_;
void deep_copy_(int n) {
T *tmp_dat = new T[n];
for (int i = 0; i < size_; ++i)
tmp_dat[i] = data_[i];
delete[] data_;
data_ = tmp_dat;
}
void fit_(int n) {
if (capacity_ >= n) return;
while (capacity_ < n)
capacity_ <<= 1;
deep_copy_(capacity_);
}
public:
Vector(int n = 0, int num = 0) : size_(n), capacity_(n > 8 ? n : 8) {
data_ = new T[capacity_];
for (int i = 0; i < size_; ++i)
data_[i] = num;
}
~Vector() { delete[] data_; }
void resize(int n = 0, int num = 0) {
fit_(n);
while (size_ < n)
data_[size_++] = num;
}
void push_back(int num) {
fit_(size_ + 1);
data_[size_++] = num;
}
void pop_back() {
if (size_) size_--;
}
public:
void reserve(int n) {
if (n > size_) capacity_ = n, deep_copy_(capacity_);
}
int capacity() { return capacity_; }
void clear() { size_ = 0; }
int size() { return size_; }
bool empty() { return size_ == 0; }
public:
T &front() { return data_[0]; }
T &back() { return data_[size_ - 1]; }
T &operator[](int i) { return data_[i]; }
public:
class Iterator {
private:
T *p_;
public:
};
T *begin() { return data_; }
T *end() { return data_ + size_; }
};
int main() {
Vector<int> a;
// a.reserve(7);
for (int i = 0; i < 1000; ++i) {
a.push_back(i);
printf("%d %d\n", i, a.capacity());
}
}
版权声明:本文为qq_57404161原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。