容器、算法、迭代器
STL标准模板库使用要包含头文件
STL是一些容器的集合,这些容器在算法的支持下使程序开发变得更加简单和高效。
1)容器
1)string
2)vector
vector存放内置数据类型----可以理解为数组类型
容器:vector
算法:for_each
迭代器:verctor<int>::interator
增删改查:
1)增:尾插push_back() insert()
2)删:尾删pop_back() erase() clear()
3)改:
4)查:empty() size() capacity()
1)swap()
接口:v1.swap(v2)交换v1和v2的数据-----巧用可以节省内存空间
如:vector<int>(v).swap(v1)--------v为匿名对象,交换之后运行完本行编译器自动释放内存(本质上是交换指针)
2)reserve()
--预留空间,若开始知道数据量很大,用reserve节省每次开辟空间的过程(如10000个数据量,需要开辟24次空间动态拓展)
3)deque
功能---双端数组,可以对头端进行插入删除操作
1)与vector区别(与数据结构有关)--deque内部有个中控器(用来维护每个缓冲区的地址,缓冲区中存放真实数据)
1)vector对于头部的插入效率低,数据量越大,效率越低,deque相对而言,对头部的插入删除速度比vector快
2)vector访问元素时的速度比deque快
3)deque没有容量的概念
2)增删改查:
1)增:尾插push_back() 头插 push_front() insert()--提供迭代器
2)删:尾删pop_back() 头删pop_front() erase()--提供迭代器 clear()
3)查:empty() size()
4)存取:at() operator[] front() back()
5)排序:sort()-----算法(通用)----标准算法头文件(algorithm)
4)stack(栈)
不支持迭代操作
5)queue(队列)
6)list(双端链表)
自定义数据类型排序要指定排序规则
7)set/multiset(集合)关联式容器----二叉树实现
特点:所有元素都会在插入时自动被排序
set---不允许有重复的元素,multiset---允许包含重复的元素
1)插入数据 --- 只有insert的方式
2)对于set而言,count统计的结果为0/1
3)set插入数据时,会返回插入结果返回值类型为pair<iterator,bool>(成对出现)
multiset插入时,返回值类型为iterator代表位置;
4)pair对组创建
1)pair<type type> 变量名 (值1,值2);
2)pair<type, type>变量名 = make_pair(值1,值2);
5)set容器排序
set默认排序规则为升序,利用仿函数技术,可以改变排序规则
在插入数据之前就改变排序规则
仿函数:本质上是一个类,通过重载()达到仿函数
例:class MyCompare
{
public:
bool operator()(int v1, int v2)
{
return v1 > v2;
}
}
1)set存放内置数据类型情况
set<int, MyCompare>s;----MyCompare--自定义排序规则,仿函数
2)set存放自定义数据类型情况
----自定义数据类型都要指定排序规则,不然编译器不知道如何排序
8)map/multimap--关联容器--底层结构使用二叉树实现
map中所有元素都为pair<key, value>
所有的元素都会根据元素的key值自动排序
优点:根据key值快速找到value值(类似于字典)
map--不可以有重复key值,multimap--可以有重复key值
1)insert(piar<type,type>(value1,value2))
2)通过仿函数修改排序规则