【C++】vector的模拟实现
以下是一个简化版的vector
模板类的实现,仅包含必要的成员函数和构造函数,以展示其基本概念和用法。
#include <iostream>
#include <cassert>
template<typename T>
class vector {
private:
T* data;
size_t size;
size_t capacity;
public:
// 构造函数
vector() : data(nullptr), size(0), capacity(0) {}
// 拷贝构造函数
vector(const vector<T>& other) {
size = other.size;
capacity = other.capacity;
data = new T[capacity];
for (size_t i = 0; i < size; ++i) {
data[i] = other.data[i];
}
}
// 移动构造函数
vector(vector<T>&& other) {
size = other.size;
capacity = other.capacity;
data = other.data;
// 为了防止析构函数释放资源两次,需要移动后将other的数据置为初始状态
other.data = nullptr;
other.size = 0;
other.capacity = 0;
}
// 析构函数
~vector() {
delete[] data;
}
// 赋值运算符重载
vector<T>& operator=(vector<T> other) {
swap(data, other.data);
swap(size, other.size);
swap(capacity, other.capacity);
return *this;
}
// 移动赋值运算符重载
vector<T>& operator=(vector<T>&& other) {
if (this != &other) {
delete[] data;
data = other.data;
size = other.size;
capacity = other.capacity;
// 为了防止析构函数释放资源两次,需要移动后将other的数据置为初始状态
other.data = nullptr;
other.size = 0;
other.capacity = 0;
}
return *this;
}
// 获取大小
size_t size() const {
return size;
}
// 获取容量
size_t capacity() const {
return capacity;
}
// 获取元素
T& operator[](size_t index)
assert(index < size);
return data[index];
}
// 获取元素(常量版本)
const T& operator[](size_t index)onst {
assert(index < size);
return data[index];
}
// 在末尾添加元素
void push_back(const T& value) {
if (size == capacity) {
// 这里没有实现容量扩展的逻辑,只是简单示例
assert(false && "Out of memory");
}
data[size++] = value;
}
// 在末尾添加元素(移动版本)
void push_back(T&& value) {
if (size == capacity) {
// 这里没有实现容量扩展的逻辑,只是简单示例
assert(false && "Out of memory");
}
data[size++] = std::move(value);
}
评论已关闭