迭代器可以把这两种标志控制的循环统一为一种控制方法:迭代器控制,每一次迭代操作中对迭代器的修改就等价于修改标志或计数器。 在STL中,容器的迭代器被作为容器元素对象或者I/O流中的对象的位置指示器,因此可以把它理解为面向对象的指针——一种泛型指针或通用指针,不依赖于元素的真实类型。 迭代器的概念如图所示:...
容器类名::iterator 迭代器名; (2)常量正向迭代器,定义方法如下: 容器类名::const_iterator 迭代器名; (3)反向迭代器,定义方法如下: 容器类名::reverse_iterator 迭代器名; (4)常量反向迭代器,定义方法如下: 容器类名::const_reverse_iterator 迭代器名; 通过迭代器,我们可以读取它指向的元素,*迭代器名...
ConcreteIterator(迭代器实现):具体迭代器角色,迭代器接口Iterator的具体实现类,记录迭代状态并对外部提供所有迭代器功能的实现。 Client(客户端):集合、容器数据的使用者,需要从集合、容器获取迭代器再进行遍历。 2, 举例 #include <stdio.h> #include <stdlib.h> // 迭代器接口 typedef struct { void* data; ...
beign():返回指向容器第一个元素的迭代器。 end():返回指向容器末尾段的迭代器。 empty():检查容器是否为空。 size():返回容器中的元素数。 clear(): 清除内容。 insert():插入元素。 erase():擦除元素。 push_back():将元素添加到容器末尾。 pop_back():移除末尾元素。 push_front():插入元素到容器起...
使用过STL都知道,iterator主要是用来遍历容器中的数据节点,那么上面这个list,我们的主要功能是能够不用在外部知道list的实现原理,使用iterator来遍历数据。 所以iterator的主要功能有: 支持,遍历元素。 支持*,取元素程序。 支持->,指针操作。 支持==和!=操作,比较iterator是否到了结尾。
vector容器的迭代器是支持随机访问的迭代器 2.vector构造函数 vector<T> v; //采用模板实现类实现,默认构造函数 vector v_1(v.begin(),v.end()); //将v[begin(),end()]区间中的元素拷贝给当前v_1容器,区间构造 vector(n,elem); //将n个elem元素拷贝给当前容器 ...
Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树(可能读者对此不太了解,等但学到树论与图论的章节的时候就会明白原因),其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候...
容器类自动申请和释放内存,无需new和delete操作。 2.2 STL迭代器 Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模式,通过运用该模式,使得我们可以在不知道对象内部表示的情况...
下面简单总结下set容器的操作: 1、set对象的定义和初始化 set对象的定义和初始化方法包括: set<T> s; set<T> s(s1); set<T> s(b, e); 其中,b和e分别为迭代器的开始和结束的标记。 例如: 代码语言:javascript 复制 #include<stdio.h>#include<vector>#include<set>using namespace std;intmain(){...
所有容器都支持迭代器操作。 大部分容器都可以支持基于stream的序列化和反序列化操作。 算法库 提供各种排序算法:冒泡排序、堆排序、快速排序、插入排序。 提供各种查找算法:线性遍历、二分法搜索。 提供各种遍历、删除、统计算法。 以迭代器为接口,实现算法和容器的分离,类似stl,但是c实现的,更加轻量。