| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 学STL吧,对自己好一点 -> 正文阅读 |
|
[C++知识库]学STL吧,对自己好一点 |
一、基本概念1.STL:standard template library 标准模板库2.六大组件容器(container):各种数据结构,如vector、list、deque、set、map;类模板技术 序列式容器:每个元素有固定位置-线性表 关联式容器:各元素之间没有严格的物理上的位序关系-非线性的树结构? 算法(algorithm):以有限的步骤解决逻辑或数学上的问题-sort、find、copy、for_each
迭代器(iterator):算法和容器的胶合剂;所有容器都有自己专属的迭代器 仿函数 适配器 空间配置器:动态空间配置、空间管理、空间释放 六大组件之间的关系:容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略的变化(比如调整sort的排序方式?),适配器可以修饰仿函数。 3.STL优点
二、容器1.vector:能自动改变长度的数组(原理:倍增)定义:
方法:size:返回大小 empty:表明是否为空 clear:把vector清空
迭代器的使用:
迭代器可以当成指针来看 2.string的基本操作2.1创建:构造函数||拷贝构造函数2.2赋值:s.assign("aaa");2.3拼接:s.append("aaa")? s += "aaa"2.4存取字符串:s.at(i) :访问越界会抛出异常:invalid string position,安全性更高? ? ? ? s[i]:不会做越界检查,但访问效率更高 ?2.5查找:s.find("xxx") 查找逻辑:从左往右查找,返回子串第一个字符的位置? ? ? ? rfind():right find:从右往左查找 2.6替换:s.replace(1,3,"11"); ????????param1:起始位置 ? ????????param2:(从起始位置算起)替换的字符个数 ? ? ????????param3:替换进去的字符串(该字符串的长度可以是任意的,和前两个参数没有关系) 2.7比较a.compare(b):a > b 返回值大于0;a < b 返回值小于0;a = b 返回0 注意比较逻辑:从第一个字符开始比,如果比得出之后的就不比了 > 、<、==有被重载,也可以使用 3.队列
3.1循环队列
3.2优先队列:
3.3双端队列:两端都可插入弹出,支持随机访问
4.栈
5.set :有序集合,用红黑树实现(类似于平衡二叉树)5.1?迭代器set和multiset的迭代器称为“双向访问迭代器”,不支持“随机访问”,支持星号*解除引用,仅支持++和--两个与算术相关的操作。 设it是一个迭代器,例如set<int>::iterator it; 若把it ++,则it会指向“下一个”元素。这里的“下一个”元素是指在元素从小到大排序的结果中,排在it下一名的元素。同理,若把it --,则it将会指向排在“上一个”的元素。 5.2定义
a.insert(x); a.find(x);//x在,返回x所在的迭代器;否则,返回a.end() a.lower_bound(x);//找到大于等于x的最小的元素的迭代器 a.upper_bound(x);;//找到大于x的最小的元素的迭代器 6.map映射(二元组)map<int,int> a;? ? ? ? //map<key,value> name 三、算法1.reverse 翻转reverse(a.begin(),a.end())//注意翻转区间是一个左闭右开区间 2.unique 去重机制:把重复的部分后移,把未重复的部分前移(不会删除重复的元素),并返回最后一个不重复元素的下一个位置的迭代器: {1,1,2,3,3,4}? --------------->{1,2,3,4,1,3} 想要彻底去除重复元素:
3.sort 排序
4. lower_bound/upper_bound 二分lower_bound的第三个参数传入一个元素x,在两个迭代器(指针)指定的部分上执行二分查找,返回指向第一个大于等于x的元素的位置的迭代器(指针)。 upper_bound的用法和lower_bound大致相同,唯一的区别是查找第一个大于(没有等于)x的元素。当然,两个迭代器(指针)指定的部分应该是提前排好序的。 如果查找的数不存在,会返回尾迭代器。 在有序int数组(元素存放在下标1 ~ n)中查找大于等于x的最小整数的下标:
在有序vector<int>中查找小于等于x的最大整数(假设一定存在):
5.for_each 遍历 |
|
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 10:16:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |