用cpp写一个vector类
时间: 2024-10-09 17:10:38 浏览: 22
cpp代码-vector容器存放自定义类型
在 C++ 中,`std::vector` 是一种动态数组,它提供了数组的一些便利特性,如自动扩容、随机访问等。以下是 `std::vector` 的一个基本实现概述:
```cpp
#include <iostream>
#include <vector>
// 使用模板定义 vector 类,T 表示元素的数据类型
template<typename T>
class Vector {
public:
// 构造函数,初始化一个空的 vector
Vector() : data_(0), capacity_(0) {}
// 插入元素到末尾,如果已满则扩容
void push_back(const T& value) {
if (data_ + 1 >= capacity_) {
resize(capacity_ * 2);
}
data_[data_] = value;
++data_;
}
// 添加元素,类似 push_back,不过可以指定位置
void insert(size_t index, const T& value) {
if (index > data_) {
throw std::out_of_range("Invalid index");
}
if (data_ + 1 >= capacity_) {
resize(capacity_ * 2);
}
for (size_t i = data_; i > index; --i) {
data_[i] = data_[i - 1];
}
data_[index] = value;
}
// 删除指定索引的元素,并将后面的元素向前移动
void remove_at(size_t index) {
if (index >= data_) {
throw std::out_of_range("Invalid index");
}
for (size_t i = index; i < data_ - 1; ++i) {
data_[i] = data_[i + 1];
}
--data_;
}
// 返回元素数量
size_t size() const { return data_; }
private:
// 存储元素的实际数据部分
T* data_ = nullptr;
// 容量,即最多能存储多少个元素
size_t capacity_;
// 扩容函数,这里仅做简单地复制所有元素
void resize(size_t new_capacity) {
T* new_data = new T[new_capacity];
for (size_t i = 0; i < data_; ++i) {
new_data[i] = data_[i];
}
delete[] data_;
data_ = new_data;
capacity_ = new_capacity;
}
};
int main() {
Vector<int> vec;
vec.push_back(1);
vec.insert(0, 0);
vec.remove_at(1);
std::cout << "Vector size: " << vec.size() << std::endl;
return 0;
}
```
请注意,这只是一个基础版本的 `std::vector` 实现,实际的 `std::vector` 提供了更多功能和优化,例如内存管理、迭代器支持以及更复杂的成员函数。
阅读全文