揭开 C++ vector 底层面纱:从三指针模型到手写完整实现
代码语言:javascriptAI代码解释public:--我们这里迭代器的使用可以测试一下,实现的打印函数我就直接放上去了,之前讲过test.c:代码语言:javascriptAI代码解释i++)//v[0]++;v[0]++;Print(v);
·
一. vector 底层核心:三指针控制内存
vector 的本质是动态管理连续内存的容器,其核心通过三个指针(迭代器)控制内存块:
- _start :指向内存块的起始位置(第一个元素的地址);
- _finish:指向有效元素的末尾(最后一个元素的下一位);
- _end_of_storage:指向内存块的末尾(容量的边界)。
代码语言:javascript
AI代码解释
namespace Lotso
{
template<class T>
class vector
{
public:
//typedef T* iterator;
using iterator = T*;
using const_iterator = const T*;
private:
iterator _start = nullptr;//数据起始位置
iterator _finish = nullptr;//有效数据
iterator _end_of_storage = nullptr;//空间
};
}
通过这三个指针,可直接计算:
- 有效元素个数(size):_finish - _start
- 容量(capacity):_end_of_storage - _start
代码语言:javascript
AI代码解释
public:
size_t capacity() const
{
return _end_of_storage - _start;
}
size_t size() const
{
return _finish - _start;
}
二. 迭代器设计:连续内存的 “天然优势”
- vector的迭代器是对原生指针的封装,支持随机访问等操作,是很好用的
迭代器类型定义:
代码语言:javascript
AI代码解释
public:
//typedef T* iterator;
using iterator = T*;
using const_iterator = const T*;
iterator begin()
{
return _start;
}
iterator end()
{
return _finish;
}
const_iterator begin() const
{
return _start;
}
const_iterator end() const
{
return _finish;
}
--我们这里迭代器的使用可以测试一下,实现的打印函数我就直接放上去了,之前讲过
- test.c:
代码语言:javascript
AI代码解释
namespace Lotso
{
void Print(const vector<int>& v)
{
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
for (size_t i = 0; i < v.size(); i++)
{
//v[0]++;
cout << v[i] << " ";
}
cout << endl;
}
void test_vector1()
{
Lotso::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
v.push_back(5);
v.push_back(5);
v.push_back(5);
v.push_back(5);
v.push_back(5);
v[0]++;
Print(v);
for (auto e : v)
{
cout << e << " ";
}
cout << endl;
}
}
int main()
{
Lotso::test_vector1();
return 0;
}

三. 核心接口实现:从构造到析构的内存管理
3.1 构造与析构:vector的基础框架
--我们这里主要介绍一下无参构造,其它的就不多讲了
更多推荐

所有评论(0)