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

2.

顺序容器

vector                               支持快速随机访问

list                                    支持快速插入/删除

deque                              双端队列

顺序容器适配器

stack                                        后进先出(栈)

queue                                      先进先出(队列)

priority_queue                        有优先级管理的队列

3.容器元素的初始化

(1)将一个容器复制给另一个容器时,类型必须匹配:容器类型和元素类型都必须相同:

vector<int> ivec;
vector<int> ivec2(ivec); //OK
list<int> ilist(ivec); //error
vector<double> dvec(ivec); //error

(2)尽管不能直接将一种容器内的元素复制给另一种容器,但系统允许通过传递一对迭代器间接实现该功能。使用迭代器时,不要求容器类型相同。容器内的元素类型也可以不相同,只要它们相互兼容,能够将要复制的元素转换为所构建的新容器的元素类型,即可实现复制。

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

(1)元素类型必须支持赋值运算

(2)元素类型的对象必须可以复制

由于引用不支持一般意义的赋值运算,因此没有元素是引用类型的容器。IO标准库不支持复制或赋值,因此不能创建存放IO类型对象的容器。

5.在指定容器元素为容器类型时,必须如下使用空格:

vector< vector<string> > lines;

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

6.容器定义的类型别名

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

iterator                                                           此容器类型的迭代器类型

const_iterator                                               元素的只读迭代器类型

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

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

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

value_type                                                    元素类型

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

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

在逆序迭代器上做++运算将指向容器中的前一个元素,最后三种类型使程序员无须直接知道容器元素的真正类型,就能使用它。需要使用元素类型时,只要用value_type即可。如果要引用该类型,则通过reference和const_reference实现。

7.容器的begin和end操作

c.begin()                   返回一个迭代器,它指向容器C的第一个元素

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

c.rbegin()                  返回一个逆序迭代器,它指向容器C的最后一个元素

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

8.任何insert或push操作都可能袋子迭代器失效。当编写循环将元素插入到vector或deque容器中时,程序必须确保迭代器在每次循环后都得到更新。

9.

c.back()      返回容器c的最后一个元素的引用。如果c为空,则该操作未定义

c.front()      返回容器c的第一个元素的引用。如果c为空,这该操作未定义

例如:

 if (!ilist.empty()) {
list<int>::reference val = *ilist.begin();
list<init>::reference val2 = ilist.front();
// last and last2 refer to the same element
list<int>::reference last = *--ilist.end();
list<int>::reference last2 = ilist.back();

10.顺序容器的赋值操作

c1 = c2                    删除容器c1的所有元素,然后将c2的元素复制给c1。c1和c2的类型(包括容器类型和元素类型)必须相同。

c1.swap(c2)          交换内容:调用完该函数后,c1中存放的是c2原来的元素,c2中存放的则是c1原来的元素。c1和c2的类型必须相同。该函数的执行速度通常要比将c2的元素复制到c1的操作快

c.assign(b,e)        重新设置c的元素:将迭代器b和e标记的范围内所有的元素复制到c中。b和e必须不是指向c中元素的迭代器

c.assign(n,t)         将容器c重新设置为存储n个值为t的元素。

注意:

assign操作首先删除容器中所有的元素,然后将其参数所指定的新元素插入到该容器中。如果在不同(或相同)类型的容器内,元素类型相互兼容,则其赋值运算必须使用assign函数。

swap操作要求交换的容器的类型必须匹配:操作数必须是相同类型的容器,而且所存储的元素类型也必须相同。关于swap的一个重要问题在于:该操作不会删除或插入任何元素,而且保证在常量时间内实现交换。由于容器内没有移动任何元素,因此迭代器不会失效。

C++ Primer 有感(顺序容器)的更多相关文章

  1. C++ Primer 笔记——顺序容器

    1.标准库中定义了一些顺序容器,所有顺序容器都提供了快速顺序访问元素的能力. 2.如果容器的元素类型没有默认构造函数,那么在构造这个容器的时候不能只指定这个容器的数目,因为没有办法默认构造这些元素. ...

  2. c++ primer 9 顺序容器

    定义: #include <vector> #include <list> #include <deque> vector<int> svec; lis ...

  3. C++ Primer 第九章 顺序容器

    由于书籍上写的已经很经典了,故大部分用图片的形式来阐述概念,代码纯手打进行验证. 1.顺序容器类型:vector.deque.list.forword_list.array.string. 2.顺序容 ...

  4. C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题

    顺序容器的添加.访问.删除操作以及forward_list的特殊操作,还有迭代器失效问题. 一.向容器添加元素 // array不支持这些操作 // forward_list有自己撰于的版本的inse ...

  5. C++ Primer : 第九章 : 顺序容器的定义、迭代器以及赋值与swap

    顺序容器属于C++ STL的一部分,也是非常重要的一部分. 顺序容器包括: std::vector,包含在头文件<vector>中 std::string, 包含在头文件<strin ...

  6. C++ Primer 随笔 Chapter 9 顺序容器

     参考:http://www.cnblogs.com/kurtwang/archive/2010/08/19/1802912.html 1..顺序容器:vector(快速随机访问):list(快速插入 ...

  7. C++ Primer 5th 第9章 顺序容器

    练习9.1:对于下面的程序任务,vector.deque和list哪种容器最为适合?解释你的选择的理由.如果没有哪一种容器优于其他容器,也请解释理由.(a) 读取固定数量的单词,将它们按字典序插入到容 ...

  8. C++ Primer 读书笔记: 第9章 顺序容器

    第9章 顺序容器 引: 顺序容器: vector 支持快速随机访问 list 支持快速插入/删除 deque 双端队列 顺序容器适配器: stack 后进先出栈 queue 先进先出队列 priori ...

  9. [C++ Primer] 第9章: 顺序容器

    顺序容器概述 顺序容器的类型有: 类型 说明 vector 可变长度数组. 支持快速随机访问. deque 双端队列. 支持快速随机访问. list 双向链表. 只支持双向顺序访问. forward_ ...

随机推荐

  1. Lucene查询结果高亮

    检索结果高亮 实现效果: 核心代码 package ucas.ir.lucene; import java.io.File; import java.io.IOException; import ja ...

  2. Sublime Text 3下C/C++开发环境搭建

    Sublime Text 3下C/C++开发环境搭建 之前在Linux Mint 17一周使用体验中简单介绍过Sublime Text. 1.Sublime Text 3安装 Ubuntu.Linux ...

  3. Git之(五)远程管理

    开篇就提到过,Git是一个分布式版本管理系统.但是到现在为止,我们所有的演练都是在本地Git仓库.如果想与他人合作,还需要一个远程的 Git 仓库.尽管技术上可以从个人的仓库里推送和拉取修改内容,但我 ...

  4. Ubuntu环境下Anaconda安装TensorFlow并配置Jupyter远程访问

    本文主要讲解在Ubuntu系统中,如何在Anaconda下安装TensorFlow以及配置Jupyter Notebook远程访问的过程. 在官方文档中提到,TensorFlow的安装主要有以下五种形 ...

  5. Programming In Scala笔记-第四章、类和对象

    类似于Java,Scala中也有类和对象的概念. 一.类.属性和方法 1.类 类是对一类事物的抽象,当一个类被定义后,就可以以该定义为模板,定义该类的一系列对象.比如说有以下一个模板 人类: 有姓名: ...

  6. How to code like a hacker

    We are coding. Are we engineers? Are we programmers? Are we coder? No, I want to be a hacker! Many g ...

  7. Swift3中如何为Array写一个限定Type的扩展

    我们知道Swift可以扩展已存在的类或结构,这些类或结构可以存在于标准库(或称为核心库)中.如果结构是一个集合类型(比如Array)就更有趣了.我们想尝试写一个限定Type数组的扩展,So我们就拿Ar ...

  8. PHP Ajax JavaScript 实现 无刷新附件上传

    普通表单 前端页面 后台处理 带有文件的表单 刷新方式 前端界面 后台页面 无刷新方式 大文件上传 POST极值 upload极值 上传细节 前端页面 后台处理 总结 对一个网站而言,有一个基本的不可 ...

  9. Ubuntu LTS 系统学习使用体会和实用工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04

    Ubuntu LTS 系统学习体会和工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04 ubuntu入门必备pdf:http://download.csdn.net/de ...

  10. RE模块错误已解决.

    下面这个错误是由于在正则[...]的内部,减号'-'是一个有特殊含义的字符(代表字符范围) 所以如果需要在[...]内匹配减号'-',需要用反斜杠'\'转义. >>> import ...