快速全排列的函数 头文件<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

例子  17-比赛1 F - 较小元素

注意事项(若需储存结构体,需重载<运算符)

 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 暑假集训第一周)的更多相关文章

  1. AYIT-2020 609暑假集训第一周周赛题 A - A计划

    可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚,告招天下 ...

  2. 暑假集训第一周比赛C题

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83146#problem/C C - 学 Crawling in process... C ...

  3. 暑假集训第一周比赛G题

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83146#problem/G G - 向 Crawling in process... C ...

  4. (未完成)catalyst-system WriteUp(2019暑假CTF第一周reverse)

    目录 预备学习--Linux实践:ELF文件格式分析 一.概述 二.分析ELF文件头(ELF header) 三.通过文件头找到section header table,理解其内容 四.通过secti ...

  5. 欢迎来到地狱 WriteUp(2019暑假CTF第一周misc)

    目录 0707,0708,0709 题目地址:欢迎来到地狱 1.地狱伊始.jpg 1.5地狱之声.wav 2.第二层地狱.docx 3.快到终点了.zip 参考 0707,0708,0709 题目地址 ...

  6. 网易云课堂_程序设计入门-C语言_第一周:简单的计算程序_1逆序的三位数

    1 逆序的三位数(5分) 题目内容: 程序每次读入一个正三位数,然后输出逆序的数字.注意,当输入的数字含有结尾的0时,输出不应带有前导的0.比如输入700,输出应该是7. 输入格式: 每个测试是一个3 ...

  7. 程序设计入门-C语言基础知识-翁恺-第一周:简单的计算程序-详细笔记(一)

    目录 第一周:简单的计算程序 1.1 第一个程序 Hello World! 1.2 变量 1.3 计算 1.4 编程作业及课后讨论 第一周:简单的计算程序 1.1 第一个程序 Hello World! ...

  8. 第一周python入门

    第一编程语言的分类: 1.机器语言  二进制编程 直接操作硬件 优点:执行速度快 缺点:开发效率低   面向机器编程 2.汇编语言 英文标签代替一串特定的二进制,直接操作硬件 缺点开发效率低   面向 ...

  9. 实验楼Linux基础入门第一周

    &&使用oschina的git服务器 1.创建了项目 https://git.oschina.net/abc99/wyq20169314 2.配置项目 (1)为项目添加公钥 项目管理- ...

随机推荐

  1. Centos7安装完毕后无法联网的解决方法(转)

    今天在VMware虚拟机中经过千辛万苦终于安装好了centos7..正兴致勃勃的例行yum update 却发现centos系统貌似默认网卡没配置好,反馈无法联网.经过一番研究,终于让centos连上 ...

  2. TP5.0:访问不同模块方法,跳转视图页面

    我们在开发项目时,都会给每个项目加上基本的后台管理页面,并命名为admin 那么,我们在添加admin后台模块后,怎么通过url访问admin后台模块文件代码呢? 1.访问admin模块默认文件的UR ...

  3. May 12th 2017 Week 19th Friday

    Love asks faith, and faith asks firmness. 爱情要求忠诚,而忠诚要求坚贞. Love, as well as many other relations amon ...

  4. POJ 2342 树的最大独立集

    题意:在树的最大独立集的基础上,加上权值.求最大. 分析: 采用刷表的方式写记忆化,考虑一个点选和不选,返回方式pair 型. 首先,无根树转有根树,dp(root). 注意的是:u不选,那么他的子节 ...

  5. Yii2 指定log存放的文件

    在main.php 文件里添加 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => ...

  6. miniMobile(手机)

    官网:http://www.web2014.cn/

  7. 【luogu P2071 座位安排】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2071#sub 邻接表 + 匈牙利 把之前的邻接矩阵匈牙利变成邻接表 要不然存不下... code: #inc ...

  8. Android学习笔记_66_图片处理专题

    1.图片缩放:不解析整个图片信息. public class DemoActivity extends Activity { @Override public void onCreate(Bundle ...

  9. 两台电脑在不同情况下ping的情况

    两台计算机(交叉连接) 同一网段 ,可以ping通.不同网段,不可以 两台计算机通过一台交换机连接 同一网段 ,可以ping通.不同网段,不可以.同一网段,同一Vlan,不可以. 综上:跨网段通信,必 ...

  10. SecureCRT 个人使用爱好配置。

    1.设置默认启动会话设置. 2.设置执行 ls命令显示文件夹,各种文件,不同的对比颜色 2.1 设置前: 2.2 设置后: 3. 如果出现会话框中文乱码 ,设置以下选项 4 . 更改 命令 ls -a ...