STL 入门 (17 暑假集训第一周)
快速全排列的函数 头文件<algorithm>
next_permutation(a,a+n) ---------------------------------------------------------------------------------------------------------------------------------------------------------
1 - string 与 字符串
find 搜寻失败会返回 string::npos 的值
string 的 erase() 删除函数
1 b.erase(1,4); //删除从 b[1] 开始 4个元素
一个应用的题目,暑假集训第一周比赛 :17-比赛1 B - 子串计算 string的运用
string类的构造函数:
string(const char *s); //用c字符串s初始化 最好是 string(s,2) 2用来控制string的长度,如果 原字符串没有以\0结尾,直接赋值会乱码
string(int n,char c); //用n个字符c初始化
string s2="hello"; //直接初始化
bool empty()const; //当前字符串是否为空 空 返回 1
void resize(int len,char c);//把字符串当前大小置为len,并用字符c填充不足的部分
void swap(string &s2); //交换当前字符串与s2的值
字符串流处理:
通过定义ostringstream和istringstream变量实现,#include <sstream>头文件中
例如:
string input("hello,this is a test");
istringstream is(input);
string s1,s2,s3,s4;
is>>s1>>s2>>s3>>s4;//s1="hello,this",s2="is",s3="a",s4="test"
ostringstream os;
os<<s1<<s2<<s3<<s4;
cout<<os.str();
UVA 1593 Alignment of Code(紫书习题5-1 字符串流)
---------------------------------------------------------------------------------------------------------------------------------------------------------
List 容器 定义↓
assign() 给list赋值 list<int>s;
back() 返回最后一个元素 list<int>::iterator it; //迭代器
begin() 返回指向第一个元素的迭代器
clear() 删除所有元素
empty() 如果list是空的则返回true
end() 返回末尾的迭代器
erase() 删除一个元素
front() 返回第一个元素
get_allocator() 返回list的配置器
insert() 插入一个元素到list中
max_size() 返回list能容纳的最大元素数量
merge() 合并两个list
pop_back() 删除最后一个元素
pop_front() 删除第一个元素
push_back() 在list的末尾添加一个元素
push_front() 在list的头部添加一个元素
rbegin() 返回指向第一个元素的逆向迭代器
remove() 从list删除元素
remove_if() 按指定条件删除元素
rend() 指向list末尾的逆向迭代器
resize() 改变list的大小
reverse() 把list的元素倒转
size() 返回list中的元素个数
sort() 给list排序
splice() 合并两个list
swap() 交换两个list
unique() 删除list中重复的元素
-------------------------------------------------------------------------------------------------------------------------------------------------------
2 - stack 容器 (先进后出(FILO)的数据结构) - queue 容器 (先进先出(队列) 的数据结构)![]()
empty() 堆栈为空则返回真 empty() 堆栈为空则返回真
pop() 移除栈顶(最晚入队的)元素 pop() 移除栈顶(最先入队的)元素
push() 在栈顶增加元素 push(x) 将x 接到队列的末端。
size() 返回栈中元素数目 size() 返回栈中元素数目
top() 返回栈顶(最晚入队的)元素 front()访问队首元素,即最早被压入队列的元素
back()访问队尾元素,即最后被压入队列的元素
- priority_queue (优先队列) 默认大的先出队
一个应用的题目:
17-比赛1 D - IPC Trainers (贪心 + 优先队列)
priority_queue<int >q1;
priority_queue<pair<int,int> >q2;
priority_queue<int,vector<int>,greater<int> >q3;//定义小的先出队
priority_queue的基本操作均与queue相同
1 //自定义大小顺序
2 class T
3 {
4 public:
5 int x,y,z;
6 T(int a,int b,int c):x(a),y(b),z(c)
7 {
8 }
9 };
10 bool operator<(const T&t1,const T&t2)
11 {
12 return t1.z<t2.z;
13 }
14 int main(void)
15 {
16 priority_queue<T>q;
17 q.push(T(4,4,3));
18 q.push(T(2,2,5));
19 q.push(T(1,5,4));
20 q.push(T(3,3,6));
21 while(!q.empty())
22 {
23 T t=q.top();
24 q.pop();
25 cout<<t.x<<" "<<t.y<<" "<<t.z<<endl;
26 }
27 system("Pause");
28 return 1;
29 }
运行结果是 :
3 3 6
2 2 5
1 5 4
4 4 3
---------------------------------------------------------------------------------------------------------------------------------------------------------
先按作者名字从小到大排,再按标题从小到大排序
1 bool operator<(Node a,Node b)
2 {
3 if(a.name==b.name)
4 return a.title<b.title;
5 return a.name<b.name;
6 }
---------------------------------------------------------------------------------------------------------------------------------------------------------
3 - map 的定义和使用 (map的key 独一无二,multimap的key 可以重复,所有元素都是pair)
C++中的STL中map用法详解
简单运用
map<key,value> a; → a[key] = value;
clear() 清空;
map.erase(map.begin(),map.end()) 清空元素
例子 :
1 map<int, int> c;
2 c[1] = 10;c[2] = 20;c[3] = 30;c[4] = 40;c[5] = 50;
3 for(auto i : c)
4 {
5 cout<<"["<< i.first <<"] = " << i.second <<" ";
6 }
运行结果为
[1] = 10 [2] = 20 [3] = 30 [4] = 40 [5] = 50
1 map<int, int> c;
2 c[1] = 10;c[4] = 20;c[3] = 30;c[2] = 40;c[5] = 50;
3 for(auto i : c)
4 {
5 cout<<"["<< i.first <<"] = " << i.second <<" ";
6 }
运行结果为
[1] = 10 [2] = 40 [3] = 30 [4] = 20 [5] = 50
key值按照 字典序 默认升序排序
size() map大小
- 迭代器
1 map<int , string> pop;
2
3 map<int, string>::pop iter;
4
5 for(iter =pop.rbegin(); iter != pop.rend(); iter++)
6
7 cout<<iter->first<<" "<<iter->second<<endl;
lower_bound函数用法,这个函数用来返回要查找关键字的下界(是一个迭代器)
upper_bound函数用法,这个函数用来返回要查找关键字的上界(是一个迭代器)
equal_range函数返回一个pair;pair里面第一个变量是Lower_bound返回的迭代器,pair里面第二个迭代器是Upper_bound返回的迭代器,如果这两个迭代器相等的话,则说明 map中不出现这个关键字。
count() 判定关键字是否存在
find() 查找 find会挨个查找map,当到达map.end()时,也就是一个也没找到,返回end
1 map<int, string>::iterator iter;
2
3 iter = pop.find(1);
4
5 if(iter != pop.end())
6
7 cout<<"Find, the value is "<<iter->second<<endl;
erase() 删除
- multimap 键值key与元素value的映照关系是多对多的关系,没有定义[]操作运算
即不能直接用 类似于 t[1] = 2; 的赋值方式
简单运用:
1 #include <iostream>
2 #include <algorithm>
3 #include <cstdio>
4 #include <map>
5 using namespace std;
6 int a[20];
7 int n;
8 int main()
9 {
10 multimap<string,int> c;
11 c.insert(pair<string,int>("Allen",18));
12 c.insert(pair<string,int>("Allen",201));
13 c.insert(pair<string,int>("Arim",0));
14 c.insert(pair<string,int>("Arim",9));
15 c.insert(pair<string,int>("Arim",18));
16 c.insert(pair<string,int>("Arim",10));
17 for(auto i:c) //遍历
18 {
19 cout<<i.first<<' '<<i.second<<endl;
20 }
21
22 cout<<"\n统计 key 为\"Allen\"的数目"<<endl;
23 int sum = c.count("Allen");
24 cout<<sum<<endl;
25 multimap<string,int>::iterator iter = c.find("Allen");
26
27 cout<<"\n遍历为key为 \"Allen\" 的 value"<<endl;
28 for(int i = 0 ; i < sum; i++)
29 {
30 cout<<iter->first<<' '<<iter->second<<endl;
31 iter++;
32 }
33 cout<<"\n使用 equal_range 遍历为key为 \"Allen\" 的 value"<<endl;
34 typedef multimap<string,int>::iterator GG;
35 pair<GG,GG> iterpair = c.equal_range("Allen");
36 //pair<multimap<string,int>::iterator,multimap<string,int>::iterator> iterpair = c.equal_range("Allen");
37 for(iter = iterpair.first; iter!=iterpair.second; iter++)
38 {
39 cout<<iter->first<<' '<<iter->second<<endl;
40 }
41
42 cout<<"\n删除key为\"Allen\" 的键值"<<endl;
43 c.erase("Allen");
44 for(auto i:c) //遍历
45 {
46 cout<<i.first<<' '<<i.second<<endl;
47 }
48 }
---------------------------------------------------------------------------------------------------------------------------------------------------------
4 - set
https://blog.csdn.net/zxy160/article/details/76461724
set中常用的方法
insert(),在集合中插入元素
erase(),删除集合中的元素
size() ,返回当前set容器中的元素个数
count()–返回某个值元素的个数(根据set的特性,就是判断这个元素在不在,返回0或1)
begin() ,返回set容器的第一个元素的迭代器
end() ,返回set容器的最后一个元素的迭代器
clear() ,删除set容器中的所有的元素
empty() ,判断set容器是否为空(空返回真)
lower_bound()–返回指向大于(或等于)某值的第一个元素的迭代器
upper_bound()–返回大于某个值元素的迭代器
find()会挨个查找set,当到达set.end()时,也就是一个也没找到,返回end
注意事项(若需储存结构体,需重载<运算符)
1 struct node{
2 int i,j;
3 };
4
5 set<node> iset; //直接定义结构体的set是不行的
6
7 //需要重载"<" 运算符
8
9 bool operator<(const node& x,const node& y)
10 {
11 return x.i < y.i; //return x.j < y.j;
12 //根据set的特性 是依据i保存 还是依据 j保存
13 }
===================================================================================================================================
5 - vector
STL 入门 (17 暑假集训第一周)的更多相关文章
- AYIT-2020 609暑假集训第一周周赛题 A - A计划
可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚,告招天下 ...
- 暑假集训第一周比赛C题
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83146#problem/C C - 学 Crawling in process... C ...
- 暑假集训第一周比赛G题
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83146#problem/G G - 向 Crawling in process... C ...
- (未完成)catalyst-system WriteUp(2019暑假CTF第一周reverse)
目录 预备学习--Linux实践:ELF文件格式分析 一.概述 二.分析ELF文件头(ELF header) 三.通过文件头找到section header table,理解其内容 四.通过secti ...
- 欢迎来到地狱 WriteUp(2019暑假CTF第一周misc)
目录 0707,0708,0709 题目地址:欢迎来到地狱 1.地狱伊始.jpg 1.5地狱之声.wav 2.第二层地狱.docx 3.快到终点了.zip 参考 0707,0708,0709 题目地址 ...
- 网易云课堂_程序设计入门-C语言_第一周:简单的计算程序_1逆序的三位数
1 逆序的三位数(5分) 题目内容: 程序每次读入一个正三位数,然后输出逆序的数字.注意,当输入的数字含有结尾的0时,输出不应带有前导的0.比如输入700,输出应该是7. 输入格式: 每个测试是一个3 ...
- 程序设计入门-C语言基础知识-翁恺-第一周:简单的计算程序-详细笔记(一)
目录 第一周:简单的计算程序 1.1 第一个程序 Hello World! 1.2 变量 1.3 计算 1.4 编程作业及课后讨论 第一周:简单的计算程序 1.1 第一个程序 Hello World! ...
- 第一周python入门
第一编程语言的分类: 1.机器语言 二进制编程 直接操作硬件 优点:执行速度快 缺点:开发效率低 面向机器编程 2.汇编语言 英文标签代替一串特定的二进制,直接操作硬件 缺点开发效率低 面向 ...
- 实验楼Linux基础入门第一周
&&使用oschina的git服务器 1.创建了项目 https://git.oschina.net/abc99/wyq20169314 2.配置项目 (1)为项目添加公钥 项目管理- ...
随机推荐
- 失去光标display=none事件的坑
1.实现效果: 失去光标进行判断,如果内容为空出现提示. 2.页面代码: <tr class="tableform_tr"> <td width="15 ...
- robotframework_如何用Chrome模拟手机打开H5页面
由于公司目前的产品大部分都是APP端的H5页面,APP原生页面很少,测试H5页面如果去搭建appium或者macaca这类自动化平台太费时,太重而不能快速落地:与自动化的目标:提高测试效率相悖.但如果 ...
- 从零开始Vue项目实战(三)-项目结构
目录结构 ├── README.md 项目介绍 ├── index.html 入口页面 ├── build 构建脚本目录 │ ├── build-server.js 运行本地构建服务器,可以访问构建后 ...
- 使用ToDateTime方法转换日期显示格式
实现效果: 知识运用: Convert类的ToDateTime方法:(将字符串转化为DateTime对象) public static DateTime ToDateTime(string value ...
- Git相关内容
先聊一点关于gitlab的内容和github的内容 Gitlab和GitHub,都是我们可以存放代码库的地方.不过Gitlab可以免费的存储私人代码,GitHub需要花钱才能够存储私人代码库,不过我想 ...
- SpringBoot非官方教程 | 第十二篇:springboot集成apidoc
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-apidoc/ 本文出自方志朋的博客 首先声明下 ...
- 一位90后程序员的自述:如何从年薪3w到30w
▌自我介绍 引用赵真老师的一首歌<过去不是错>中的一句话:过去不是过错,毕竟我们也开心过.过去不是过错,何必愧疚不知所措. 我们这一代人,我相信多少都会有人和我一样,坚持过一个游戏,叫 D ...
- 2018/7/19 考试(tower,work,holes)
noip模拟赛,挺良心的题,考的贼烂(膜一下@来日方长大佬(sdfz rank1)) 不多说了,看题吧 1.tower 题面: 铁塔(tower.pas/c/cpp) 题目描述 Rainbow和Fre ...
- ABAP术语-Error Message
Error Message 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/30/1058283.html Information from ...
- kali2.0 设置输入法 找了好久,亲测有效
kali2.0更新源启用中文输入法 查看版本信(Version): uname -r uname -r 工具(Tools): fcitx fcitx fcitx-table-wbpy 更新源:(Sou ...