10、C++ Primer 4th 笔记,顺序容器(2)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 1、size 指容器当前拥有的元素个数;而 capacity 则指容器在必须分配新存储空间之前可以存储的元素总数。而reserve操作则告诉vector容器应该预留多少元素的存储空间。 2、通常来说,除非找到选择使用其他容器的更好理由,否则vector 容器都是最佳选择。

1size 指容器当前拥有的元素个数;而 capacity 则指容器在必须分配新存储空间之前可以存储的元素总数。而reserve操作则告诉vector容器应该预留多少元素的存储空间。

2、通常来说,除非找到选择使用其他容器的更好理由,否则vector 容器都是最佳选择。

3、除了顺序容器,标准库还提供了三种顺序容器适配器:queue(FIFO queue,简称queue)priority_queue stack。适配器(adaptor)是标准库中通用的概念,包括容器适配器、迭代器适配器和函数适配器。

4、适配器通用的操作和类型

size_type

一种类型,足以存储此适配器类型最大对象的长度

value_type

元素类型

container_type

基础容器的类型,适配器在此容器类型上实现

A a;

创建一个新空适配器,命名为 a

A a(c);

创建一个名为 a 的新适配器,初始化为容器 c 的副本

关系操作符

所有适配器都支持全部关系操作符:==!=<<=>>=

5、默认的stack,queue都基于deque容器实现,而priority_queue则在vector容器上实现。通过将一个顺序容器指定为适配器的第二个类型实参,可覆盖其关联的基础容器类型:

// empty stack implemented on top of vector
stack< string, vector<string> > str_stk;
// str_stk2 is implemented on top of vector and holds a copy of svec
stack<string, vector<string> > str_stk2(svec);

    对于给定的适配器,其关联的容器必须满足一定的约束条件。stack适配器所关联的基础容器可以是任意一种顺序容器类型。因此,stack栈可以建立在

vectorlist或者deque容器之上。而queue适配器要求其关联的基础容器必须提供push_front运算,因此只能建立在listdeque容器上,而不能建立在vector 容器上。priority_queue 适配器要求提供随机访问功能,因此可建立在vector deque 容器上,但不能建立在 list 容器上。

6、两个相同类型的适配器可以做相等、不等、小于、大于、小于等于以及等于关系比较,只要基础元素类型支持等于和小于操作符既可。这些关系运算由元素依次比较来实现。第一对不相等的元素将决定两者之间的小于或大于关系。

7、栈适配器

s.empty()

如果栈为空,则返回 true,否则返回 stack

s.size()

返回栈中元素的个数

s.pop()

删除栈顶元素的值,但不返回其值

s.top()

返回栈顶元素的值,但不删除该元素

s.push(item)

在栈顶压入新元素

    所有容器适配器都根据其基础容器类型所支持的操作来定义自己的操作。

8、队列及优先级队列支持的操作

q.empty()

如果队列为空,则返回 true,否则返回 false

q.size()

返回队列中元素的个数

q.pop()

删除队首元素,但不返回其值

q.front()

返回队首元素的值,但不删除该元素。该操作只适用于队列

q.back()

返回队尾元素的值,但不删除该元素。该操作只适用于队列

q.top()

返回具有最高优先级的元素值,但不删除该元素。该操作只适用于优先级队列

q.push(item)

对于 queue,在队尾压入一个新元素,对于 priority_quue,在基于优先级的适当位置插入新元素

9、容器定义的操作非常少,只定义了构造函数、添加或删除元素的操作、设置

容器长度的操作以及返回指向特殊元素的迭代器的操作。其他一些有用的操作,

如排序、查找,由标准算法定义。在容器中添加或删除元素可能会使已存在的迭代器失效。

10、所有标准容器类型都是模板类型。标准库容器具有可变的长度。

参考:

[1] http://blog.163.com/zhoumhan_0351/blog/static/399542272010227112325224/

http://blog.163.com/zhoumhan_0351/blog/static/39954227201031114410145/

目录
相关文章
|
9月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
226 2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
存储 C++ 容器
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器1
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
229 5
|
12月前
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
171 0
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
228 2
|
C++ 容器
【C/C++笔记】迭代器
【C/C++笔记】迭代器
186 1
|
设计模式 存储 C++
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现(二)
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现
122 0
|
存储 C++ 容器
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现(一)
【C++】C++ STL探索:容器适配器 Stack 与 Queue 的使用及模拟实现
142 0
|
存储 安全 程序员
【C/C++笔记】迭代器范围
【C/C++笔记】迭代器范围
195 0
|
安全 编译器 容器
C++STL容器和智能指针
C++STL容器和智能指针