行业知识
【C++】vector模拟实现+迭代器失效
2026-10-21 12:55:43
来源:互联网转载
vector模拟实现
- 成员变量定义
- 默认成员函数
- 构造函数
- 迭代器
- 范围for、对象类型匹配原则
- 容量操作
- size
- empty
- capacity
- reserve
- 成员变量未更新
- memcpy值拷贝
- resize
- 内置类型的构造函数
- 数据访问
- front
- back
- operator[ ]
- 数据修改操作
- push_back
- pop_back
- swap
- clear
- insert
- pos位置未更新
- 无返回值
- erase
- 无返回值
- 迭代器失效
- 定义
- insert导致的迭代器失效
- erase导致的迭代器失效
- 删除vector中的奇数
- 非���的间接寻址
铁汁们,今天给大家分享一篇vector模拟实现 + 迭代器失效,来吧,开造⛳️
成员变量定义
- 指向最后一个空间的下一个位置
iterator _endofstorage
- 指向存储第一个有效数据空间的位置
iterator _start
- 指向存储最后一个有效数据空间的下一个位置
iterator _finish
- 在成员变量声明处给缺省值,实质上是将缺省值给了初始化列表。
- 在创建一个新的对象时,都需要先走初始化列表完成初始化,在走构造函数。
#define _CRT_SECURE_NO_WARNINGS 1#include#include#includeusing namespace std;templateclass vector {private:iterator _start = nullptr; //起始位置iterator _finish = nullptr; //有效数据的结束位置iterator _endofstorage = nullptr; //容量的结束位置};默认成员函数
构造函数
vector( ) { } ;
- 功能:构造无参的对象
vector() {}; //无参构造vector(size_t n, const T& val = T( ) ) ;
- 功能:构造含n个val值的对象
vector(size_t n, const T& val = T()) //用n个val值构造{resize(n, val);}vector( InputIterator first, InputIterator last ) ;
- 功能:构造与[first, last)范围一样多元素的对象
template // 注意: 模板内可以在嵌套模板vector(InputIterator first, InputIterator last) //用迭代区间进行构造{ //泛型编程,函数模板,不是只适用于某个容器的的迭代器,适用于所有容器的的迭代器while (first != last){push_back(*first);first++;}}Tips:模板内可以嵌套其他模板。
迭代器
templateclass vector {public:typedef T* iterator;typedef const T* const_iterator;}Tips:指向连续物理空间的指针是天然的迭代器。
iterator begin( ) ;
- 功能:返回指向第一个元素的位置。
iterator begin() //迭代器所指向的空间内的值 “既可读又可写”{ //只适用于const对象(权限可以平移)、不适用于非const对象(权限不可以放大)return _start; //vector第一个元素所在的位置(指针)}Tips : const_iterator 修饰的是迭代器所指向的元素不能被修改,而迭代器本身可以被修改。const修饰this指针,表示在该成员函数中成员变量不允许被修改,此处const的用法只能用于类中的成员函数。
iterator end( ) ;
- 功能:返回指向最后一个元素的下一个位置。
iterator end(){return _finish; //vector最后一个元素后面所在的位置(指针)}const_iterator begin( )const ;
const_iterator begin()const //迭代器所指向的空间内的值 “只可不可写”{return _start; //既适用于const对象(权限可以平移)、又适用于非const对象(权限可以缩小)}const_iterator end( )const ;
const_iterator end()const{return _finish;}范围for、对象类型匹配原则
const vector v(5, 2);for (auto& e : v){cout return _finish - _start;}return size() == 0;}vectorreturn _endofstorage - _start;}if (n capacity()) //此处在判断:1.自己直接调用reserve,2.其他接口间接调用reserve{T* tmp = new T[n]; //扩容 new:开空间+构造函数,完成初始化size_t old = size(); // 注意 :因为new[]会开辟新的空间if (_start) //拷贝旧空间中的值{for (int i = 0; i
- 功能:返回指向最后一个元素的下一个位置。
- 功能:返回指向第一个元素的位置。
- 功能:构造与[first, last)范围一样多元素的对象
- 功能:构造含n个val值的对象
- 功能:构造无参的对象
- 指向存储最后一个有效数据空间的下一个位置
- 指向存储第一个有效数据空间的位置
- 指向最后一个空间的下一个位置
上一篇:平头哥服务器怎么样?
下一篇:服务器滑轨通用吗怎么用?