第九章 顺序容器

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

2.标准库定义了三种顺序容器类型:vector、list 和 deque(是双端队列“double-ended queue”的简写,发音为“deck”)

3.顺序容器适配器包括 stack、queue 和 priority_queue 类型。

4.顺序容器类型:

    1.vector 支持快速随机访问.

    2.list 支持快速插入/删除.

    3.deque 双端队列.

5.顺序容器适配器:

    1.stack 后进先出(LIFO)堆栈.

    2.queue 先进先出(FIFO)队列.

    4.priority_queue 有优先级管理的队列.

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

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

8.可以通过一种容器的一对迭代器来初始化另一种容器。

9.创建顺序容器时,可显式指定容器大小和一个(可选的)元素初始化式。

10.如果元素类型没有默认构造函数,则必须显式指定其元素初始化式来初始化容器。

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

12.容器元素类型必须满足以下两个约束:

    1.元素类型必须支持赋值运算。

    2.元素类型的对象必须可以复制。

13.如果容器存储类类型的对象,那么只有当其元素类型提供默认构造函数时,容器才能使用这种指定容器大小构造函数。

14.常用迭代器运算:

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

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

15.vector 和 deque 类型迭代器支持的操作:

    iter + n 在迭代器上加(减)整数值 n,将产生指向容器中前面(后面)第 n个元素的迭代器。

    iter1 -= 这里迭代器加减法的复合赋值运算:将 iter1 加上或减去 iter2 的运算结果赋给 iter1。

    iter1 - iter2 两个迭代器的减法,其运算结果加上右边的迭代器即得左边的迭代器。

    <, <=  代器的关系操作符。当一个迭代器指向的元素在容器中位于另一个迭代器指向的元素之前,则前一个迭代器小于后一个迭代器。

16.C++ 语言使用一对迭代器标记迭代器范围(iterator range),这两个迭代器分别指向同一个容器中的两个元素或超出末端的下一位置,通常将它们命名为first 和 last,或 beg 和 end,用于标记容器中的一段元素范围。

17.使用迭代器编写程序时,必须留意哪些操作会使迭代器失效。使用无效迭代器将会导致严重的运行时错误。

18.容器定义的类型别名:

    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&

19.begin 和 end 操作产生指向容器内第一个元素和最后一个元素的下一位置的迭代器,如表 9.6 所示。这两个迭代器通常用于标记包含容器中所有元素的迭代器范围。

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

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

22.所有顺序容器都支持push_back 操作提供在容器尾部插入一个元素的功能。

23.容器元素都是副本。

24.在顺序容器中添加元素的操作:

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

    2.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.在迭代器 p 所指向的元素前面插入由迭代器 b 和 e 标记的范围内的元素。返回 void 类型。

25.添加元素的操作可能会使迭代器失效。

26.所有的容器类型都支持用关系操作符来实现两个容器的比较:

    1.如果两个容器具有相同的长度而且所有元素都相等,那么这两个容器就相等;否则,它们就不相等。

    2.如果两个容器的长度不相同,但较短的容器中所有元素都等于较长容器中对应的元素,则称较短的容器小于另一个容器。

    3.如果两个容器都不是对等的初始子序列,则它们的比较结果取决于所比较的第一个不相等的元素。

27.使用元素提供的关系操作符实现容器的关系运算,C++ 语言只允许两个容器做其元素类型定义的关系运算,所有容器都通过比较其元素对来实现关系运算的。

28.容器大小的操作:

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

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

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

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

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

29.如果容器非空,那么容器类型的 front 和 back 成员(表 9.9)将返回容器内第一个或最后一个元素的引用:

    list<int>::reference last = *--ilist.end();
    list<int>::reference last2 = ilist.back();

30.访问顺序容器内元素的操作:

    1.c.back()

    2.c.front()

    3.c[n] 返回下标为 n 的元素的引用,(只适用于 vector 和 deque 容器)

    4.c.at(n) 返回下标为 n 的元素的引用。(只适用于 vector 和 deque 容器)

31.删除顺序容器内元素的操作:

    1.c.erase(p) 删除迭代器 p 所指向的元素,返回一个迭代器,它指向被删除元素后面的元素,如果 p 指向
容器内的最后一个元素,则返回的迭代器指向容器的超出末端的下一位置。

    2.c.erase(b,e) 删除迭代器 b 和 e 所标记的范围内所有的元素.

    3.c.clear() 删除容器 c 内的所有元素。返回 void.

    4.c.pop_back() 删除容器 c 的最后一个元素。返回 void。

    5.c.pop_front() 删除容器 c 的第一个元素。返回 void。(只适用于 list 或 deque 容器)

32.顺序容器的赋值操作:

    1.c1 = c2   c1和c2 的类型(包括容器类型和元素类型)必须相同.

    2.c1.swap(c2) 交换内容:调用完该函数后,c1 中存放的是 c2 原来的元素, c2 中存放的则是 c1 原来的元素。

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

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

33.带有一对迭代器参数的 assign 操作允许我们将一个容器的元素赋给另一个不同类型的容器。

34.string:

    1.s.insert(p, t) 在迭代器 p 指向的元素之前插入一个值为 t 的新元素。返回指向新插入元素的迭代器。

    2.s.assign(b, e) 在迭代器 b 和 e 标记范围内的元素替换 s。对于 string 类型,该操作返回 s;对于容器类型,则返回 void。

    3.s.erase(p) 删除迭代器 p 指向的元素。返回一个迭代器,指向被删除元素后面的元素。

    4.s.substr(pos, n) 返回一个 string 类型的字符串,它包含 s 中从下标 pos开始的 n 个字符。

    5.s.append( args) 将 args 串接在 s 后面。返回 s 引用。

    6.s.replace(pos, len, args) 删除 s 中从下标 pos 开始的 len 个字符,用 args指定的字符替换之。返回 s 的引用。

    7.s.find( args) 在 s 中查找 args 的第一次出现。

    8.s.rfind( args) 在 s 中查找 args 的最后一次出现。

    9.s.find_first_of( args) 在 s 中查找 args 的任意字符的第一次出现。

    10.s.find_first_not_of( args) 在 s 中查找第一个不属于 args 的字符。

    11.s.compare(pos1, n1, s2) 让 s 中从 pos 下标位置开始的 n1 个字符与 s2 做比较。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值