陆续的题目以及部分没有写的内容将会在近期补上,初学者请多指教~~直接进入正题吧
STL主要分为:①非修改操作 ②非修改操作;
主要的头文件有:
#include<algorithm> // 算法头文件
#include<functional>
#include<vector>
#include<queue>
#include<set>
#include<map>
一、非修改操作:
//find() 寻找x出现的位置
//count() 寻找出现次数
eg:
int main()
{
int i;
int a[5] = {1, 3 , 2 , 1 , 3};
//非修改操作
//find() 寻找
//count() 寻找出现次数
int ans = find(a, a + n, 3) - a;
// 访问范围[0, n), 寻找5 返回地址 , 得到下标, 复杂度 O(n);
int cnt = count(a, a + n, 3); // 访问范围【0, n) 寻找3出现的次数;
printf("%d\n", ans);
printf("%d\n", cnt);
return 0;
}
二、修改操作
//swap() 交换两个相同类型的变量
//reverse() 反转数组
//unique() 数组去重
//fill()* 以指定值填充数组
//copy()* 拷贝数组
eg:
int A = 5, B = -5;
int a[5] = {1, 3 , 2 , 1 , 3};
swap(A, B); //交换A B
reverse(a, a + 5); //反转
for (i = 0;i <= 4;i ++)
{
printf("%d ",a[i]);
}
printf("\n");
int newlen = unique(a, a + 5) - a; //去重
for (i = 0;i <= newlen - 1;i ++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("%d %d\n", A, B);
排序
//sort() 排序
//stable_sort* 稳定排序 ————保证输出顺序与输入顺序相同————添加functional头文件
eg:
int newa[5] = {1, 3, 2, 1, 3};
sort(newa, newa + n);
for (i = 0;i <= 4;i ++)
{
printf("%d ",newa[i]);
}
printf("\n");
stable_sort(newa, newa + n, greater<int>()); //int为数据类型 greater为排序要求
for (i = 0;i <= 4;i ++)
{
printf("%d ",newa[i]);
}
printf("\n");
//二分查找 __先排序————一定要排序!!!
//binary_search() 寻找是否出现———— bool型 复杂度log(n);
//lower_bound() 返回第一个小于等于K的值
//upper_bound() 返回第一个大于等于K的值
sort(a, a + 5);
printf("%ld\n",upper_bound(a, a + 5, 2) - a);
printf("%ld\n",lower_bound(a, a + 5, 2) - a);
//集合操作 *
//merge() 合并
//set_union()* 求并集
———————————————————————————
//堆
// make_heap()
// push_heap()
// pop_heap()
// sort_heap()
———————————————————————————
//最值操作
//min() max()
//min_element() 数组中的最小值 复杂度O(n)
//max_element() 数组中的最大值 复杂度O(n);
推荐题目: 模拟EXCEL排序 + 堆中的路径
——————————————————————————
《VECTOR》
//vector __动态数组 末尾插入
//头文件vector
// 不定长数组,随加随用
// 适合不断想尾部追加元素
// push_back() 向尾部追加元素
// pop_back() 从尾部删除元素
// front() 返回第一个元素
// back() 返回最后一个元素
// insert() 插入元素
// erase() 删除元素 + 删除元素的下标
// clear() 清空vector
vector<int>x;
x.push_back(1); //插入
x.push_back(2);
x.push_back(3);
for (i = 0;i < x.size();i ++) //x.size()为长度
{
printf("%d ",x[i]);
}
printf("\n");
x.pop_back();
for (i = 0;i < x.size();i ++) //x.size()为长度
{
printf("%d ",x[i]);
}
printf("\n");
x.insert(x.begin() + 1, 5); //在a[1]的位置插入K
for (i = 0;i < x.size();i ++) //x.size()为长度
{
printf("%d ",x[i]);
}
printf("\n");
x.erase(x.begin() + 1); //删除a[1]
for (i = 0;i < x.size();i ++) //x.size()为长度
{
printf("%d ",x[i]);
}
推荐题目: 说反话 + 打印学生选课清单
———————————————————————————
/stack __栈
// 灵活方便
// push(); 入栈
// pop(); 将顶栈元素弹出
// top(); 返回栈顶
// empty(); 判断是否为空
// size(); 返回栈元素数量
———————————————————————————
// //queue 队列 ———— queue
// push(); 入栈
// pop(); 将顶栈元素弹出
// top(); 返回栈顶
// empty(); 判断是否为空
// size(); 返回队列元素数量
// front(); 返回对首元素
// priority_queue 优先队列 ———— queue ————默认 大到小排序
// push(); 入栈
// pop(); 将顶栈元素弹出
// top(); 返回栈顶
// empty(); 判断是否为空
// size(); 返回队列元素数量
priority_queue<int, vector<int>, greater<int> >q; //从小到大排序
q.push(3);
q.push(1);
q.push(5);
while(!q.empty())
{
printf("%d\n", q.top());
q.pop();
}
printf("\n");
printf("\n");
priority_queue<int>p; //从大到小排序
p.push(3);
p.push(1);
p.push(5);
while(!p.empty())
{
printf("%d\n", p.top());
p.pop();
}
——————————————————————————
//set ———— 集合
// 传统意义上的集合
// 元素不重复(自动去重)
// insert() 插入元素到集合
// erase() 从集合删除元素
// count() 返回元素是否存在
// size() 返回集合元素个数
// clear() 清空
set<int>s;
s.insert(1);
s.insert(2);
s.insert(3);
s.insert(2);
set<int>::iterator it;
for (it = s.begin(); it != s.end(); ++ it) //遍历
{
printf("%d ", *it);
}
推荐题目 : 集合相似度 + 列车调度
——————————————————————————
// map ———— 映射 ———— 哈希 ??字符串 ??
// 按照<键,值>的形式映射
// 直接按照数组的形式操作
// a[“abc”] 哈希
// b[123456789] 大数组
// insert()插入键值对
// count()判断键是否存在
// erase()删除键
// clear()清空map
map<string, int>mpl;
mpl["abc"] = 1;
mpl["abb"] = 2;
printf("%d\n", mpl["aaa"]); //不存在的 都为0
printf("\n");
printf("\n");
printf("\n");
map<long long , int>mp2;
mp2[1234567890] = 3;
printf("%d\n",mp2[1234567890]);
推荐题目 :树种的统计 + 航空公司VIP客户查询;