STL总结
容器类放入的都是元素的拷贝,而非引用。所以如果需要对元素做出改动,最好是把元素存在data[N]数组中,而仅仅在容器中存放数组下标。
函数传递容器类参数时,需要传引用,否则会超时。
vector
vector作为数组,vector <int> num[ N ],可以当作二维数组使用,由于所有的vector初始为空,所以N可以很大。
1、vector< vector<int> >,注意加空格,否则会编译错误。
2、迭代器访问:vector<int> vec;
vector<int> :: iterator it;
for(it = vec.begin(); it != vec.end(); it++) //vector 不支持 it < vec.end(), 只能用不等号, vec.end()指示最后一个元素的下一个地址。[ begin, end)
*it = 123; //使用迭代器 *it 即可
3、push_back()、 pop_back(),在末尾加入、删除一个元素, clear() 清空。
4、size(),返回大小。
5、insert(it, x):在迭代器it处插入x。 vector<int> :: iterator it = vec.begin(); vec.insert(it + 5, "abcde"); //数组下标5的低方插入"abcde"。
6、erase(it): 删除迭代器it处的元素。 erase(it, it + 5):删除区间 [it, it + 5) 的元素,左闭右开。
set
set内部元素自动递增排序,且不重复
1、find(x),查找x, 返回x处的迭代器,查找失败为end()。
2、insert(x), 插入x。
string
1、string转char[]: string ss = “abc”; char a* = ss.c_str();
char[]转string:直接赋值即可。
2、可直接相加, 可以比较大小。
3、string ss1 = "abcgh", ss2 = "def"; ss1.insert(3, ss2); // 在ss1[3]的位置插入ss2.
4、erase迭代器删除和vector一致, str.erase( pos, length); //从pos位置删除length长度的元素
5、substr(pos, length): 返回从pos开始长length 的子串。(区间操作,使用迭代器就是左闭右开,使用数字下标就是开始位置和长度)
map
1、map的迭代器使用, key = it->first, val = it->second;
2、map[ " key" ] 在查询过程中必须先确定是否存在 if(mp.count( "key" ) == 0),否则会返回错误的结果(没有该键值时,会在map中插入该key,并将其值设为默认值)。
3、mp.erase(key),删除以key为键的元素。
queue、stack
1、基本的push、pop操作,pop仅仅删除元素,并不返回。
2、队列不删除仅访问元素 : front、bac; 栈:top
3、都没有清空操作,需要自己写循环来pop
algorithm
1、max、min、abs、swap
2、sort(num, num + N, cmp):对于数字参数,b处应写最后一个元素的下一个位置; 对于容器,b处填end。
3、reverse(it, it2):填入区间,在该区间内反转,填写方式与sort一致。
STL总结的更多相关文章
- 详细解说 STL 排序(Sort)
0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...
- STL标准模板库(简介)
标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应 ...
- STL的std::find和std::find_if
std::find是用来查找容器元素算法,但是它只能查找容器元素为基本数据类型,如果想要查找类类型,应该使用find_if. 小例子: #include "stdafx.h" #i ...
- STL: unordered_map 自定义键值使用
使用Windows下 RECT 类型做unordered_map 键值 1. Hash 函数 计算自定义类型的hash值. struct hash_RECT { size_t operator()(c ...
- C++ STL简述
前言 最近要找工作,免不得要有一番笔试,今年好像突然就都流行在线笔试了,真是搞的我一塌糊涂.有的公司呢,不支持Python,Java我也不会,C有些数据结构又有些复杂,所以是时候把STL再看一遍了-不 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
- STL bind1st bind2nd详解
STL bind1st bind2nd详解 先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ...
- STL sort 函数实现详解
作者:fengcc 原创作品 转载请注明出处 前几天阿里电话一面,被问到STL中sort函数的实现.以前没有仔细探究过,听人说是快速排序,于是回答说用快速排序实现的,但听电话另一端面试官的声音,感觉不 ...
- STL的使用
Vector:不定长数组 Vector是C++里的不定长数组,相比传统数组vector主要更灵活,便于节省空间,邻接表的实现等.而且它在STL中时间效率也很高效:几乎与数组不相上下. #include ...
- [C/C++] C/C++延伸学习系列之STL及Boost库概述
想要彻底搞懂C++是很难的,或许是不太现实的.但是不积硅步,无以至千里,所以抽时间来坚持学习一点,总结一点,多多锻炼几次,相信总有一天我们会变得"了解"C++. 1. C++标准库 ...
随机推荐
- JackSon学习笔记(一)
概述 Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”. Jackson框架包含了3个核心库:streaming,databind,annotation ...
- Python常见字符编码间的转换
主要内容: 1.Unicode 和 UTF-8的爱恨纠葛 2.字符在硬盘上的存储 3.编码的转换 4.验证编码是否转换正确 5.Python bytes类型 前 ...
- Linux内核分析期中总结
目录: “Linux内核分析”实验一报告 “Linux内核分析”实验二报告 “Linux内核分析”实验三报告 Linux实验四报告 “Linux内核分析”第五周报告 "Linux内核分析&q ...
- SSO的定义、原理、组件及应用
定义: https://baike.baidu.com/item/SSO/3451380 原理: https://blog.csdn.net/cutesource/article/details/58 ...
- [CB]2018年中国智能手机市场出货量
Canalys:2018年中国智能手机市场出货量同比跌逾14% https://www.cnbeta.com/articles/tech/813267.htm 市场调研机构Canalys今日公布中国智 ...
- fasterxml.jackson 将对象转换为json报错处理
最近在做查询的数据遇到如下报错: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found ...
- Macbook系统环境安装wget的2个方法 - 传统包及Homebrew安装
文章目录 这里有2个方法可以安装wget命令工具: 考虑到自身项目的拓展需要,朋友建议学习Python爬虫这样对于做大数据采集有较大的帮助,老蒋虽然每天也都接触一些脚本和程序的修改,但是并没有专业和系 ...
- VS2008中英文转换
设置Visual Studio的语言: 工具=>选项=>环境=>区域设置=>语言 如图: 对于英文不好的朋友还是挺好用的
- 什么样的 GitHub 才适合放简历上?
为什么 GitHub 可以加分? 很多招聘描述上面都会备注 GitHub 是加分项,那么为什么它是加分项呢? 停,如果看到这里你还不知道 GitHub 是什么,可以看一下 Phodal的手记:http ...
- Bootstrap洼地
前面的话 这是一个轻量.灵活的组件,它能延伸至整个浏览器视口来展示网站上的关键内容.本文将详细介绍Bootstrap洼地 概述 洼地(Well)样式的效果和巨幕jumbotron样式类似,不同点是we ...