C++ primer 顺序容器

来源:互联网 发布:家园2 mac 中文版 编辑:程序博客网 时间:2024/06/03 21:57

最常用的顺序容器类型: vector类型
容器容纳特定类型对象的集合。标准库vector类型是一种顺序容器,将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素。
标准库定义了三种顺序容器类型:vector , list , deque (double ended queue).
容器只定义了少量的操作,大多数额外的操作由算法库提供。
容器类型的操作集合形成了以下类型:

  • 一些操作适用于所有的容器
  • 另外一些操作只适用于顺序或者关联容器
  • 还有一些操作只适用于顺序或者关联容器的一个子集

所有的容器都是类模板,要定义某种特殊的容器,必须在容器后面加一对尖括号,尖括号里面提供容器存放元素的类型。
容器类型一般使用默认构造函数,可以达到最佳的性能
除了默认构造函数,容器类型还提供了其他的构造函数
这里写图片描述

当不使用默认构造函数,而是使用其他构造函数初始化顺序容器时,必须指出该容器有多少个元素。

尽管不可以将一种容器内的元素复制给另一种容器,但系统允许通过传递一对迭代器间接实现该功能。不要求容器的类型相同,容器内元素的类型也可以不相同,只要他们互相兼容。
这里写图片描述

char *word[] = {“stately”,”plump”,”buck”}
c++中单引号是一个字符,双引号是字符串,c风格字符串
c++中操作字符串是通过它在内存中的首地址进行的,所以字符串常量的本质是地址
char word[]中,中括号的优先级高于 ,所以先是word[]结合,数组中的元素是char * ,

创建顺序容器时,可显式的指定容器大小和一个(可选的)元素初始化式,容器大小可以是常量或非常量表达式,元素初始化式必须是可用于初始化其元素类型的对象的值
创建容器时,可以只指定容器的大小,不提供元素初始化式时,标准库将为容器实现初始化,如果元素类型没有默认构造函数,必须显式的指定元素的初始化式。

容器内元素的类型约束:
容器的元素类型必须满足两个约束:
1. 元素类型必须支持赋值运算
2. 元素类型的对象必须可以复制
除了引用类型外,所有的内置或者复合类型都可以做元素类型,引用不支持一般意义的赋值运算,所以没有元素是引用的容器。
除了输入输出(IO)标准库类型,所有的标准库类型都是有效的容器元素类型,容器本身也可以。

容器操作的特殊要求:
支持复制和赋值是容器元素类型的最低要求,只有在同时指定每个元
素的初始化式时,才能使用给定容器大小的构造函数来创建同类型的容器对象

容器的容器

vector< vecotr<string> > lines; //vector类型的容器,容器的元素是string类型的vector对象vector< vector<string>> lines; //这样是不对的,注意空格,分开两个>

和容器类型一样,所有的迭代器具有相同的接口
这里写图片描述
这里写图片描述

vector和deque容器的迭代器提供的额外操作
这里写图片描述
这里写图片描述

迭代器范围:
使用一对迭代器标记迭代器范围,这两个迭代器通常分别指向同一个容器的两个元素或者超出末端的一个元素。第二个迭代器从来都不是指向元素范围的最后一个元素, 而是指向最后一个元素的下一位置。
该范围的元素包括迭代器first指向的元素,以及从first开始一直到迭代器last指向的位置之前的所有元素。如果两个迭代器相等,则迭代范围为空。
[ first ,last ) 左闭合区间

使用左闭合区间的程序意义:
1.当first和last相等时,迭代范围为空
2.当first和last不相等时,迭代范围至少有一个元素,而且first指向该区间中的第一个元素。通过若干次自增运算,使first值不断增大,直到first == last为止。

原创粉丝点击