目录
STL"标准模板库"
c++的核心
STL容器:
序列式容器
元素固定位置,元素位置取决于插入的时机和地点,与值无关,vector,list,deque
关系式容器
取决于元素值的大小,set,multiset,map,multim
特性
1.外部数据外部管理,内部数据内部管理
2.多次遍历元素次序相同
3.各项操作并非绝对安全
迭代器
用来访问类中的所有元素,行为类似指针
访问特性:半开区间(左闭右开).
定义迭代器
vector <int> ::interator vit;
删除迭代器会失效,可获取删除位置的下一个位置
一.vector
封装了动态大小数组的顺序容器,vector是一个能够存放任意类型的动态数组,也称为向量
使用:#include<vector>
//类名<类型>对象名
//半倍扩容
size/2 比1小 加一
比一大 加一半
尾删只是无法访问
v.at 会判断越界
自己扩容
1.resize 会赋值
2.reserve 不会赋值
二维数组
1.int row , col;2.vector<vector<int>> vv;3.vv.reserve(row)//q4.for循环确定列
*deque双向队列
deque是双向开口的连续线性空间(动态的将多个连续空间通过指针数组联系在一起)
头尾均可快速插入和删除
中间比较慢
插入
deque<int > dq;
for (int i = 0; i < 6; ++i)
{
dq.push_back(i + 1);
}
for (int i = 0; i < 6; ++i)
{
dq.push_front(i*11 + 11);
}
删除
dq.pop_front();
dq.pop_back();
迭代器定义 //出现内存重分配,迭代器会失效(顺序结构)
deque<int >::iterator dit;
erase()函数删除pos位置上的元素,或者删除start和end之间的所有元素。返回值是一个iterator,指向被删除元素的后一个元素。
迭代器遍历deque
int i = 0;
for (dit = dq.begin(); dit != dq.end(); dit++, ++i)
{
printf("dq[%i]=%i\n", i + 1, *dit);
}
*list双链表
1.不支持随机存取
2.任何位置删除插入很快
3.插入删除不会导致指向其他元素的指针引用迭代器失效
list <int> L;
for (int i = 0; i < 6; ++i)
{
L.push_back(i + 1);
}
for (int i = 0; i < 6; ++i)
{
L.push_front(i * 11 + 11);
}
定义迭代器
list<int >::iterator lit;
lit = L.begin(); //list无法随机访问,只能迭代器++伪随机访问
for (int i = 0; i < 5; ++i)
lit++;
按数值删除
L.remove(11);//没有就不删
list进阶应用
按条件删除
L.remove_if(isBase);
//通过回调函数判断是否删除
去重函数 L.unique(); //两两判断删除
传入回调达成升序降序效果
map 集合结构
//二叉查找树 和c#的list类似
map的元素类型Key和T
1.Key 和value 必须满足可赋值和可复制的性质
2.key必须可比较
3.根据已知的key搜寻某个元素性能比已知value搜寻某个元素性能好
map<int, double> m;
//插入
m[1] = 3.14;
m[2] = 2.68;
m[0] = 3.33;
//删除
//根据key值删除
m.erase(1);
//迭代器
map<int, double>::iterator mit;
//同样不支持随机访问
for (mit = m.begin(); mit != m.end(); mit++)
printf("key %i =%f\n", mit->first, mit->second);
元素的插入
//元素的插入
m.insert(std::pair<int, double>(8, 123));//pair进行结构创建
m.insert(map<int, double>::value_type(9, 444));//调用成员函数
m.insert(std::make_pair(5, 2.333));//捏造一个结构
//默认升序
map<string, int, greater<string>> mm;//greater按照string为key进行降序
map<string, int, less<int>> mmm;//less按照int为key进行升序
Multimap 允许可重复的元素