C++具有内置数据结构,但为了更好的满足开发者的需求,C++标准库提供了多种容器来供程序员调用,本篇博客主要是顺序容器的相关知识点总结
在C++中,容器主要是一些特定类型的集合,顺序容器为程序员提供存储和顺序访问的能力,主要的容器类型有vector、deque、list、forward_list、array、string,与内置数据类型相比,容器往往具有更好的灵活性和安全性,因此有必要掌握,下面分别进行介绍:
向量vector:
介绍:可变数组大小,支持快速随机访问,缺点是在尾部之外的位置进行插入或删除元素可能很慢
初始化定义方法:vector<typeElem> V;注意在早期版本的编译器中,如果typeElem为另外一个vector类型,则需要在两个相邻的>中间以空格隔开,否则报错
双端队列:deque
介绍:支持随机访问,在头尾插入元素速度很快
初始化定义方法:deque<typeElem> D;
双向链表:list
介绍:支持双向顺序访问,在链表的任意位置进行元素的插入或删除速度都很快
初始化定义方法:list<typeElem> listexem;
单项链表:forward_list
介绍:支持单向顺序随机访问,在链表的任意位置进行插入和删除速度都很快
初始化定义方法:forward_list<typeElem> flist;
数组容器:array
介绍:固定数组大小,支持快速随机访问,不能添加或删除元素,具有跟内置数组相似的性质,但相对于内置数组具有更好的安全性,也更加方便操作,例如支持数组赋值
初始化定义方法:array<typeElem> arr;
字符串容器:string
介绍:与vector性质相似,不同之处在于专门用来保存字符数据
初始化定义方法:string str;string str(“stringelem”);
C++标准库的顺序容器类型大致就这么多,他们在执行不同的操作时性能各有优劣,需要程序员根据需要自行选用,下面介绍一下容器的遍历及访问操作,对容器进行遍历,通常都会用到迭代器,迭代器是C++标准库为了方便容器操作而定义的一个接口类型,iterator beg = ss.bengin();以此方式可以定义并初始化一个迭代器,在C++11标准支持auto数据类型定义,即左值类型根据右值的数据类型来定,故迭代器也可以用auto beg = ss.begin();的方式来定义,对于一个容器,都定义有last()方法来获取他的尾后迭代器,注意他是指向最后一个元素的下一个位置,即一个没有实际意义的位置,在使用过程中一定要注意这一点
在C++标准中所有的容器都支持相等运算符,但是只有顺序容器支持关系运算符,因此应该养成使用相等运算符进行条件判断的习惯。
每次进行插入和删除之后往往都会使迭代器失效,因此我们必须及时刷新迭代器,特别注意尾喉迭代器必须定义在循环内部,否则一旦容器添加或删除了元素就可能发生无法预知的错误。
容器中凡是涉及到访问元素的操作都返回的事元素的引用,如果要使用变量来改变迭代器的元素值,必须将相应的变量定义为引用类型,