我是靠谱客的博主 愉快帅哥,最近开发中收集的这篇文章主要介绍顺序容器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

顺序容器内的元素按其位置存储和访问。

标准库定义了三种顺序容器类型:vector、list和deque(双端队列,读“deck”)。

标准库还提供了三种容器适配器(adaptor)。包括stack、queue和priority_queue类型。

顺序容器

  • vector                   支持快速随机访问
  • list                        支持快速插入删除
  • deque                        双端队列

顺序容器适配器

  • stack                         后进先出(LIFO)栈
  • queue                       先进先出(FIFL)队列
  • priority_queue          有优先级管理的队列

1.顺序容器的定义

#include<vector>

#include<list>

#include<deque>

所有容器都是类模板,要定义某种特殊的容器,必须在容器名后加一对尖括号,尖括号里面提供容器中存放的元素的类型。

例如,vector<string>、list<int>、deque<Sales_item>。

注意:为了使程序更清晰、简短,容器类型最常用的构造函数是默认构造函数。在大多数的程序中,使用默认构造函数能达到最佳运行时性能,并且使容器更容易使用。

 

2.容器元素的初始化

(1)C<T> c;  创建一个名为c的空容器。C是容器类型名,如vector,T是元素类型,如int或string。

(2)C c(c2);  创建容器c2的副本c;c和c2必须具有相同的容器类型,并存放相同类型的元素。适用于所有容器。

(3)C c(b,e);  创建c,其元素是迭代器b和e标示的范围内元素的副本。适用与所有容器

(4)C c(n,t);  用n个值为t的元素创建容器c,其中值t必须是容器类型C的元素类型的值,或者是可转换为该类型的值。只用用于顺序容器。

(5)C c(n);  创建n个值初始化元素的容器c,只适用与顺序容器。

注意:将一个容器复制给另一个容器时,类型必须匹配;容器类型和元素类型都必须相同。

接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这种初始化。

 

3.容器内元素的类型约束

C++语言中,大多数类型都可以用作容器的元素类型。容器元素类型必须满足以下两个约束:

  • 元素类型必须支持赋值运算。
  • 元素类型的对象必须可以复制。

注意:IO库类型不支持复制和赋值。因此,不能创建存放IO类型对象的容器。

 

4.容器的容器

vector< vector<string> > lines;

 注意:必须使用空格隔开两个相邻的 > 符号,以示这是两个分开的符号,否则,系统会认为 >> 是单个符号,为右移操作符,并结果导致编译时错误。

 

5.迭代器和迭代范围

 常用的迭代器的运算

*iter                               返回迭代器iter所指向的元素的引用

iter->men                      对iter进行解引用,获取指定元素名为mem的成员。等效于(*iter).mem

++iter                            对iter加1,使其指向容器里的下一个元素

iter++                            

--iter                              对iter减1,使其指向容器里的前一个元素

iter--  

iter1==iter2                   比较两个迭代器是否相等(或不等)。当两个迭代器指向同一个容器中的同一个元iter1 != iter2                  素,或者当它们指向同一个容器的超出末端的下一个位置,两个迭代器相等。

 

注意:迭代器first和last如果满足以下条件,则可以形成一个迭代器范围:

(1)它们指向同一个容器中的元素或超出末端的位置

(2)如果这两个迭代器不相等,则对first反复做自增运算必须能够到达last。换句话说,在容器中,last绝对不能位于first之前。

 

6.容器定义的类型别名

(1)size_type                              无符号型,足以存储此容器类型的最大可能容器长度

(2)iterator                                  此容器类型的迭代器类型

(3)const_iterator                       元素的只读迭代器类型

(4)reverse_iterator                   按逆序寻址元素的迭代器

(5)const_reverse_iterator         元素的只读(不能写)逆序迭代器

(6)difference_type                    足够存储两个迭代器差值的有符号整数,可为负数

(7)value_type                           元素类型

(8)reference                             元素的左值类型,是value_type&的同义词

(9)const_reference                  元素的常量左值类型,等效于const  value_type&

 

7.begin和end成员

begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器。

(1)c.begin()        返回一个迭代器,它指向容器c的第一个位置

(2)c.end()           返回一个迭代器,它指向容器c的最后一个元素的下一个位置

(3)c.rbegin()       返回一个逆序迭代器,它指向容器c的最后一个元素
(4)c.rend()          返回一个逆序迭代器,它指向容器c的第一个元素前面的位置

注意:上述操作都有两个不同版本:一个是const成员,另一个是非const成员。如果容器不是const,则这些操作返回iterator和reverse_iterator类型。如果容器是const,则其返回类型要加上const_前缀,也就是const_iterator和const_reverse_iterator类型。

 

8.在顺序容器中添加元素

(1)c.push_back(t)                 在容器c的尾部添加值为t的元素,返回void类型。

(2)c.push_front(t)           在容器c的前端添加值为t的元素,返回void类型。只适用于list和deque容器类型

(3)c.insert(p,t)               在迭代器p所指向的元素前面插入值为t的新元素。返回指向新添加的元素的迭代器

(4)c.insert(p,n,t)        在迭代器p所指向的元素前面插入n个值为t的新元素,返回void类型。

(5)c.insert(p,b,e);    在迭代器p指向的元素前面插入由迭代器b和e标记的范围内的元素。返回void类型。

 

9.容器大小的操作

(1)c.size();              返回容器c中的元素个数。返回类型为c::size_type

(2)c.max_size();     返回容器c可容纳的最多元素个数,返回类型为c::size_type

(3)c.empty();          返回标记容器大小的是否为0的布尔值

(4)c.resize(n);         调整容器c的长度大小,使其能容纳n个元素,如果n<c.size(),则移出多出来的元素,否则添加采用值初始化的新元素

(5)c.resize(n,t);       调整容器c的长度大小,使其能容纳n个元素。所有新添加的元素值都为t

 

最后

以上就是愉快帅哥为你收集整理的顺序容器的全部内容,希望文章能够帮你解决顺序容器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部