9.1 顺序容器的定义--C++ Primer ReadNote

9.1 顺序容器的定义

顺序容器Sequential Container主要有三种:vectorlistdeque
主要区别在于访问元素的方式和增删操作的代价。

Container 特点
vector 支持快速随机访问
list 支持快速插入删除
deque 双端队列
9.1.1容器元素的初始化

顺序容器初始化主要有5种:

语法 容器构造法 适用范围 说明
C c 默认构造函数 所有容器 C是容器类型名,T是元素类型,
C c(c1) 复制构造函数 所有容器 c1和c必须相同容器类型和元素类型
C c(it_b,it_e) 部分复制 所有容器 it_b与it_e是迭代器
C c(n,t) 指定初始化元素数目和默认值 顺序容器 n是个数,t是元素默认值
C c(n) 指定初始化元素数目 顺序容器 n是个数,默认值是0或者空
  • 默认初始化
    最常用、最简单、最佳运行时性能:C c

  • 其他初始化
    完全复制:C c(c1)
    部分复制:C c(it_b,it_e)
    指定初始化元素数目:C c(n)
    指定初始化元素数目和默认值:C c(n,t)

9.1.2 容器内元素类型的约束

基本元素类型约束:可复制可赋值
不能作为容器元素类型举例如下:

No. 类型 原因
1 引用类型 不可赋值
2 auto_ptr 不可复制
3 IO库类型 不可复制赋值
  1. 容器操作的特殊要求
    支持复制和赋值是容器元素类型的最低要求,一些容器操作需要特殊要求。例如:
操作 Operation 约束
空容器初始化 C c 最低约束
指定元素个数和参数的容器初始化 C c(n,t) 带参数t相同类型形参的构造函数
指定元素个数的容器初始化 C c(n) 默认构造函数

例如:Foo是一个没有默认构造函数,但是有一个int型形参的构造函数。

vector empty; // ok,不需要默认构造函数
vector bad(10);// error,需要默认构造函数
vector ok(10,1);// ok,需要`int`型形参的构造函数

2.容器的容器
容器本身可以作为容器的元素类型。例如:vector >
注意,最后两个>之间需要有一个空格。C++11已经没有这个要求了


收获

本节主要讲解Sequential Container的三个容器(vector,list,deque)和五种通用初始化方式;容器对元素类型是有最低约束的(可复制可赋值),其他一些操作也会对元素有特殊约束要求。

你可能感兴趣的:(9.1 顺序容器的定义--C++ Primer ReadNote)