【C++ Primer】第9章 顺序容器

来源:互联网 发布:义乌淘宝招聘信息 编辑:程序博客网 时间:2024/05/21 21:40

9章 顺序容器

顺序容器:vectorlistdeque
顺序容器适配器:stackqueuepriority_queue

顺序容器的定义

所有的容器都是类模版

容器元素的初始化

初始化为另一容器的副本

初始化为一段元素的副本

分配和指定数目的元素

容器元素类型必须满足两个约束

必须支持赋值

对象必须可以复制

所有引用类型就被排除了,它不支持一般意义的赋值运算

容器的容器vector< vector<string> > lines,必须将两个>隔开,否则系统会以为>>是单个符号

迭代器

vectordeque的迭代器都提供额外的算术运算,关系操作符也只适用于vectordeque

list的迭代器不支持算术运算,也不支持关系运算

迭代器的endlast是指向最后元素的下一位置[first, last)

使用左闭合区间的意义

firstlast相等,迭代器为空

firstlast不等,至少有一个元素

修改容器的内在状态或者移动容器的元素,会使指向容器的迭代器失效(此处有问题,vector会,但list不会)

无法检查迭代器是否有效或失效

顺序容器的操作

由容器定义的类型别名:size_type, iterator, const_iterator, reverse_iterator, difference_type, value_type, reference, const_reference

list<string>::iterator iter; //iter is the iterator type defined by list<string>

c.begin()、c.end()、c.rbegin()、c.rend(),如果容器不是const,则返回Iteratorreverse_iterator, 否则返回const_前缀

添加元素:所有的容器都支持push_backpush_front, insert。容器元素都是副本

所有的容器类型都支持关系操作符的比较,但必须有相同的容器类型,其元素类型也必须相同

容器的比较类似于string类型的关系运算

长度相等,所有元素相等,则容器相等

长度不等,较短的容器中所有元素都等于较长容器中对应的元素,小于

如果两个容器都不是对方的初始子序列,则比较结果取决于第一个不相同的元素

容器大小的操作:size, max_size, empty, resize,

访问元素:front, back , c[n], c.at(n)

删除元素:erase, clear, pop_back, pop_front,后两者的返回值不是删除的元素,而是void

erase删除由迭代器指向的一个或一段元素,它也不会检查它的参数

赋值与swap:等号、swapassign(重设),赋值和assign会使左操作数容器的迭代器失效,swap不会

assign操作会首先删除容器中的所有元素,然后将其参数指定的新元素插入到该容器

vector自增长

vector类提供了两个成员函数:capacityreservecapacity操作获取在容器需要分配更多的存储空间之前能够存储的元素总数,reserve告诉容器应该预留多少个元素的存储空间

size指的是容器当前拥有的元素个数

vector的每种实现都可以自由选择内存分配策略

容器的选用

插入、删除、访问等操作影响容器的选取

当然,也可以搭配使用

再谈string

string提供了容器操作,可以像操作vector一样操作string

string不支持带有单个容器长度作为操作的构造函数

char no_null = {H‘I’};

string s(no_null); // runtime error: not null-terminated

string的比较:关系操作符、compare函数

容器适配器

三种顺序容器适配器:queuepriority_queuestack

stackqueue基于deque实现,priority_queue基于vector实现