#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());
}
}
c++ stl vector(手写版)
最新推荐文章于 2022-08-23 11:15:21 发布
本文介绍了一个C++模板类Vector,详细讲解了其构造、resize、push_back、pop_back等操作,重点在于深拷贝和容量调整函数。通过实例展示了如何使用Vector存储整数并动态调整大小。
摘要由CSDN通过智能技术生成