小工具知识网

当前位置: 首页 > 行业知识 > 【C++】vector模拟实现+迭代器失效

行业知识

【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 

上一篇:平头哥服务器怎么样?

下一篇:服务器滑轨通用吗怎么用?