您的位置:首页 > 其它

[STL基础]顺序容器

2013-01-10 15:50 169 查看

容器

同一种类型对象的集合。这些容器的共有成员函数:empty()判断容器中是否有元素,max_size()容器中最多能装多少元素,swap()交换两个容器的内容。

比较两个容器大小的运算符:=,<,<=,>,>=,==,!=

1.若两容器长度相同、所有元素相等,则两个容器就相等,否则为不等。
2.若两容器长度不同,但较短容器中所有元素都等于较长容器中对应的元素,则较短容器小于另一个容器。
3.若两个容器均不是对方的子序列,则取决于所比较的第一个不等的元素)

线性表

在实际应用中,线性表都是以字符串string,数组array,栈stack,队列queue,优先队列priority_queue,向量vector,列表list,双向队列deque等特殊线性表的形式来使用的。根据存储方式可分为顺序表,链表;链表又分为单链表,双链表,循环链表。

顺序容器(vector,list,deque)

元素排列次序与元素值无关,而是由元素添加到容器里的顺序决定的。

1.定义赋值,它们的定义赋值assign及用法完全相同。
2.都有返回表头元素表尾元素front(),back(),对于双向链表list和双向队列deque来说也只有一个表头和一个表尾,这里的双向是对元素可以双向添加删除而言的。
3.增加删除元素,都提供了在表尾增加删除元素方法push_back(),pop_back(),在任意位置增加删除元素方法insert(),erase(),全部删除元素clear()。
4.返回iterator和reverse_iterator 返回指向表头元素的指针begin(),返回表尾元素下一个位置end(),返回指向表尾元素的指针rbegin(),返回表头元素前一个位置rend()。
5.其他 获取长度size(),重置长度resize(),返回最大长度max_size(),两个容器互换swap(),判断是否为空empty()

vector

向量vector就是动态数组。顺序存储(说明可以用索引值,at()来进行元素访问,且其iterator可以+-n),连续存储元素。比list和deque多提供了获取容量capacity(),设置最小容量reserve()

list

列表list是一个双向链表。链式存储(不可以用索引值来进行访问,且其iterator不可以+-n),由节点组成的双向链表,每个节点包含着一个元素。由于是双向链表,所以比vector多提供了在表头增加删除函数push_front(),pop_front(),此外比vector和deque多提供了排序函数sort(),队列合并merge()(注意:合并前需要排序),接合函数splice(),去重函数unique(),删除元素函数remove(),remove_if()

deque

双向队列deque。顺序存储(说明可以用索引值,at()来进行元素访问,且其iterator可以+-n),连续存储指向不同元素的指针所组成的数组。由于是双向队列,所以比vector多提供了在表头增加删除函数push_front(),pop_front(),此外比vector少提供了逆序函数reverse()

选择容器类型的法则

如果程序要求随机访问元素,则应使用 vector 或 deque 容器。

如果程序必须在容器的中间位置插入或删除元素,则应采用 list 容器。

如果程序不是在容器的中间位置,而是在容器首部或尾部插入或删除元素,则应采用 deque 容器。

如果只需在读取输入时在容器的中间位置插入元素,然后需要随机访问元素,则可考虑在输入时将元素读入到一个 list 容器,接着对此容器重新排序,使其适合顺序访问,然后将排序后的 list 容器复制到一个 vector 容器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: