1.迭代器 vector实际上是由迭代器进行维护的,关于迭代器是什么,为什么要叫这个名字,后面的学习会逐渐了解,现在先将迭代器是作为指针即可。 vector底层有三个迭代器,用来起到容量、数组头、元素个数的作用。 同时为了实现方便存储各种类型的vector,vector要写成类模板。 代码语言:javascript 复制 template<classT>class...
因此,在处理算法时,最好将关联容器上的迭代器视为支持自减运算的输入迭代器,而不是完整的双向迭代器。 最后需要注意的是,stack、queue、priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/deque/list对象创建了一个先进后出容器,queue是用deque或list对象创建了一个先进先出容器,priorit...
我们string已经学习的差不多了,现在开始学习vector,我们这里会发现,STL的设计很相似,我们学习了一个,这里面就很简单了,我们简单的先看一下vector的使用,今天的重点是迭代器失效的问题和深层次的拷贝问题,这才是我们的难点。 vector 使用 vector可以理解为我们之前的动态的数组,也就是顺序表.它也是一个类模板.我们...
}//返回指向第一个元素的迭代器MyVector::Iterator MyVector::begin() {returnIterator(m_pData); }//返回指向最后一个元素后面位置的迭代器MyVector::Iterator MyVector::end() {returnIterator(m_pData +m_nSize); } MyVector::MyVector(constMyVector&obj) {*this=obj; } MyVector& MyVector::opera...
__normal_iterator是一个对原生指针的非常简单的包装。可以把它看作一个跟原生指针功能一样的随机访问迭代器。 构造函数 vector(n, value)的实现 在vector中有如下定义: 289vector(size_type__n,constvalue_type&__value,290constallocator_type&__a=allocator_type())291:_Base(__n,__a)292{_M_fill_ini...
vector支持用一段迭代器区间构造,也可以支持任意类型的迭代器区间,所以要写成函数模板 代码语言:javascript 复制 template<classInputIterator>vector(InputIterator first,InputIterator last){while(first!=last){push_back(*first);first++;}} vector还可以利用给定的初始值进行初始化构造,为了方便使用各种类型的初始值...
当然迭代器底层有可能就是一个指针(vector),也有可能是一个类模板(list)。 下面我们再来理解一下下面的这两个代码 首先从底层来说上面的两个东西是一样的,因为listiterator的底层实现就是一个list<int>*的变量,但是两者一个是自定义类型,一个是内置类型。并且都对两者进行++的结果也是不一样的,前者的++是直接...
二. vector的模拟实现 1. 基本框架 vector是个类模板,这样它就可以存储不同数据类型的变量,其迭代器是数据类型的指针。 template<class T>class vector{public:typedef T* iterator; //普通迭代器typedef const T* const_iterator;//const迭代器private:iterator _first; //指向第一个有效数据的指针iterator _fin...
迭代器 1.迭代器简介 迭代器是一个“可遍历STL容器内全部或部分元素”的对象。 迭代器指出容器中的一个特定位置。 迭代器就如同一个指针。 迭代器提供对一个容器中的对象的访问方法,并且可以定义了容器中对象的范围。 2.双向迭代器与随机访问迭代器 双向迭代器支持的操作: it++, ++it, it–, –it,*it...
要在使用迭代器遍历vector并删除元素,可以使用以下方法: 使用迭代器遍历vector,并在循环中判断条件后调用erase()方法删除元素。 #include <iostream> #include <vector> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; for(auto it = vec.begin(); it != vec.end(); ) { if(*it %...