IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++标准模板库的六大构成组件 -> 正文阅读

[C++知识库]C++标准模板库的六大构成组件

C++标准模板库的六大构成组件

泛型容器(containers)

????特殊的数据结构,实现了数组、链表、队列、等等,实质是模板类

迭代器(iterators)

????一种复杂的指针,可以通过其读写容器中的对象,实质是运算符重载

算法(algorithms)

????读写容器对象的逻辑算法:排序、遍历、查找、等等,实质是模板函数

空间配置器(allocator)

????容器的空间配置管理的模板类

配接器(adapters)

????用来修饰容器、仿函数、迭代器接口

仿函数(functors)

????类似函数,通过重载()运算符来模拟函数行为的类

组件间的关系

????container(容器) 通过 allocator(配置器) 取得数据储存空间,

????algorithm(算法)通过 iterator(迭代器)存取 container(容器) 内容,

????functor(仿函数) 可以协助 algorithm(算法) 完成不同的策略变化,

????adapter(配接器) 可以修饰或套接 functor(仿函数)。

?这些组件最终实现一些常见的数据结构的快速使用。

1、vector(向量)

vector相当于一个动态数组

数组方式连续存储,可以使用[] 符号进行随机访问,

#include "vector"

??(1)初始化vector对象的方式:

vector<T>v1 ; //默认的初始化方式,内容为空

vector <T>v2(v1) ;//v2是v1的一个副本

vector<T>v3(n ,i) ;//v3中包含了n个数值为i的元素

vector<T>v4(n) ;//v4包含了n个元素,每个元素的值为0

(2)vector常用函数

empty():判断向量是否为空,为空返回真,否则为假

begin():返回向量(数组)的首元素地址

end(): 返回向量(数组)的末元素的下一个元素的地址

clear():清空向量

front():返回得到向量的第一个元素的数据

back():返回得到向量的最后一个元素的数据

size():返回得到向量中元素的个数

push_back(数据):将数据插入到向量的尾部

pop_back():删除向量尾部的数据

2、list(双向链表)

链表相对于vector向量来说的优点在于:

(a)动态的分配内存,当需要添加数据的时候不会像vector那样,先将现有的内存空间释放,在次分配更大的空间,这样的话效率就比较低了。

(b)支持内部插入、头部插入和尾部插入

缺点:不能随机访问,不支持[]方式和vector.at()、占用的内存会多于vector(非有效数据占用的内存空间)

#include "list"

(1)初始化list对象的方式

list L0; ???//空链表

list L1(3); ??//建一个含三个默认值是0的元素的链表

list L2(5,2); //建一个含五个元素的链表,值都是2

list L3(L2); //L3是L2的副本

list L4(L1.begin(),L1.end()); ???//c5含c1一个区域的元素[begin, end]。

(2)list常用函数

begin():返回list容器的第一个元素的地址

end():返回list容器的最后一个元素之后的地址

rbegin():返回逆向链表的第一个元素的地址(也就是最后一个元素的地址)

rend():返回逆向链表的最后一个元素之后的地址(也就是第一个元素再往前的位置)

front():返回链表中第一个数据值

back():返回链表中最后一个数据值

empty():判断链表是否为空

size():返回链表容器的元素个数

clear():清除容器中所有元素

insert(pos,num):将数据num插入到pos位置处(pos是一个地址)

insert(pos,n,num):在pos位置处插入n个元素num

erase(pos):删除pos位置处的元素

push_back(num):在链表尾部插入数据num

pop_back():删除链表尾部的元素

push_front(num):在链表头部插入数据num

pop_front():删除链表头部的元素

sort():将链表排序,默认升序

3、deque(队列)

合并了 vector 和 list的特点,

优点

随机访问方便,即支持[]操作符和vector.at(n)

在内部方便的进行插入和删除操作

可在两端进行push、pop

缺点占用内存多

使用区别

如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector

如果你需要大量的插入和删除,而不关心随机存取,则应使用list

如果你需要随机存取,而且关心两端数据的插入和删除,则应使用deque

#include "deque"

deque<int> d1; ?//创建一个空的双端队列d

deque<int>d2(n) ;//创建一个元素个数为n的队列

deque<int>d3(n,num);//创建一个元素个数为n的队列,并且每个元素为num

成员函数:

push_back() ??//在队尾插入元素

push_front() ??//在队首插入元素

insert(d.begin()+1,9); ??//第一个元素之后插入9

size() ??//双端队列的大小

empty() ??//判断是否为空

begin() ??//队首的指针,指向队首元素

end() ??//队尾元素的下一位作为指针

rbegin() ?//以最后一个元素作为开始

rend() ??//以第一个元素的上一位作为指针

erase() ??//删除某一个元素

clear() ??//删除所有元素

pop_front() ??//删除队首元素

pop_back() ??//删除队尾元素

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 00:51:43  更:2022-09-04 00:55:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 10:19:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码