【C++】vector介绍以及模拟实现(超级详细)
在C++中,vector
是一个动态数组,用于存储任意类型的数据,并且长度可以动态改变。vector
是标准模板库中的一部分,被定义在<vector>
头文件中。
以下是vector
的一些主要操作:
- 构造函数:可以创建一个空的
vector
,或者包含特定元素的vector
。 - 容量操作:检查
vector
的容量和大小。 - 访问元素:使用下标操作符或
at()
函数来访问vector
中的元素。 - 修改
vector
:添加和删除元素,以及插入和删除元素。 - 迭代器:用于遍历
vector
中的元素。
以下是模拟实现vector
的基本代码:
#include <iostream>
#include <algorithm>
namespace mystd {
template<typename T>
class vector {
private:
T* data;
size_t size;
size_t capacity;
public:
// 构造函数
vector() : data(nullptr), size(0), capacity(0) {}
// 析构函数
~vector() {
delete[] data;
}
// 添加元素
void push_back(const T& val) {
if (size == capacity) {
// 重新分配策略(这里省略了)
}
data[size++] = val;
}
// 获取大小
size_t size() const {
return size;
}
// 获取容量
size_t capacity() const {
return capacity;
}
// 访问元素
T& operator[](size_t index)
return data[index];
}
// 删除最后一个元素
void pop_back() {
if (!empty()) {
--size;
}
}
// 检查是否为空
bool empty() const {
return size == 0;
}
// 清空
void clear() {
size = 0;
}
};
}
int main() {
mystd::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
for (size_t i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
vec.pop_back();
for (size_t i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
vec.clear();
if (vec.empty()) {
std::cout << "Vector is empty." << std::endl;
}
return 0;
}
这个模拟实现的vector
包含了最基本的功能,但是缺少了重新分配内存和其他高级功能,如迭代器支持、初始化器列表支持等。这个实现仅用于教学目的,实际的vector
实现要复杂得多。
评论已关闭