| |
|
开发:
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语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/11 9:58:28- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |