快速全排列的函数 头文件<algorithm>

  1. next_permutation(a,a+n)
  2.  
  3. ---------------------------------------------------------------------------------------------------------------------------------------------------------
    1 - string 字符串

find 搜寻失败会返回 string::npos 的值

string 的 erase() 删除函数

  1. 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 字符串流)

  1. ---------------------------------------------------------------------------------------------------------------------------------------------------------
  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中重复的元素
  1. -------------------------------------------------------------------------------------------------------------------------------------------------------
  1.  
  1. 2 - stack 容器 (先进后出(FILO)的数据结构) - queue 容器 (先进先出(队列) 的数据结构)

empty() 堆栈为空则返回真                                                                                                   empty() 堆栈为空则返回真

pop() 移除栈顶(最晚入队的)元素                                                                                     pop() 移除栈顶(最先入队的)元素

push() 在栈顶增加元素                                                                                                       push(x)  将x 接到队列的末端。

size() 返回栈中元素数目                                                                                                     size() 返回栈中元素数目

top() 返回栈顶(最晚入队的)元素                                                                                       front()访问队首元素,即最早被压入队列的元素

back()访问队尾元素,即最后被压入队列的元素

  1. - priority_queue (优先队列) 默认大的先出队
    一个应用的题目:

17-比赛1 D - IPC Trainers (贪心 + 优先队列)

  1.  
  2. priority_queue<int >q1;

priority_queue<pair<int,int> >q2;

priority_queue<int,vector<int>,greater<int> >q3;//定义小的先出队

priority_queue的基本操作均与queue相同

  1.  
  1. 1 //自定义大小顺序
  2. 2 class T
  3. 3 {
  4. 4 public:
  5. 5 int x,y,z;
  6. 6 T(int a,int b,int c):x(a),y(b),z(c)
  7. 7 {
  8. 8 }
  9. 9 };
  10. 10 bool operator<(const T&t1,const T&t2)
  11. 11 {
  12. 12 return t1.z<t2.z;
  13. 13 }
  14. 14 int main(void)
  15. 15 {
  16. 16 priority_queue<T>q;
  17. 17 q.push(T(4,4,3));
  18. 18 q.push(T(2,2,5));
  19. 19 q.push(T(1,5,4));
  20. 20 q.push(T(3,3,6));
  21. 21 while(!q.empty())
  22. 22 {
  23. 23 T t=q.top();
  24. 24 q.pop();
  25. 25 cout<<t.x<<" "<<t.y<<" "<<t.z<<endl;
  26. 26 }
  27. 27 system("Pause");
  28. 28 return 1;
  29. 29 }
    运行结果是
    3 3 6
    2 2 5
    1 5 4
    4 4 3
  1. ---------------------------------------------------------------------------------------------------------------------------------------------------------

先按作者名字从小到大排,再按标题从小到大排序

  1. 1 bool operator<(Node a,Node b)
  2. 2 {
  3. 3 if(a.name==b.name)
  4. 4 return a.title<b.title;
  5. 5 return a.name<b.name;
  6. 6 }

 

  1. ---------------------------------------------------------------------------------------------------------------------------------------------------------

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. 1 map<int, int> c;
  2. 2 c[1] = 10;c[2] = 20;c[3] = 30;c[4] = 40;c[5] = 50;
  3. 3 for(auto i : c)
  4. 4 {
  5. 5 cout<<"["<< i.first <<"] = " << i.second <<" ";
  6. 6 }
    运行结果为
    [1] = 10  [2] = 20  [3] = 30  [4] = 40  [5] = 50
  1. 1 map<int, int> c;
  2. 2 c[1] = 10;c[4] = 20;c[3] = 30;c[2] = 40;c[5] = 50;
  3. 3 for(auto i : c)
  4. 4 {
  5. 5 cout<<"["<< i.first <<"] = " << i.second <<" ";
  6. 6 }
    运行结果为
    [1] = 10  [2] = 40  [3] = 30  [4] = 20  [5] = 50
    key值按照 字典序 默认升序排序

 size() map大小

 - 迭代器

  1. 1 map<int , string> pop;
  2. 2
  3. 3 map<int, string>::pop iter;
  4. 4
  5. 5 for(iter =pop.rbegin(); iter != pop.rend(); iter++)
  6. 6
  7. 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. 1 map<int, string>::iterator iter;
  2. 2
  3. 3 iter = pop.find(1);
  4. 4
  5. 5 if(iter != pop.end())
  6. 6
  7. 7 cout<<"Find, the value is "<<iter->second<<endl;

erase() 删除

 - multimap 键值key与元素value的映照关系是多对多的关系,没有定义[]操作运算

即不能直接用 类似于 t[1] = 2; 的赋值方式

简单运用:

  1. 1 #include <iostream>
  2. 2 #include <algorithm>
  3. 3 #include <cstdio>
  4. 4 #include <map>
  5. 5 using namespace std;
  6. 6 int a[20];
  7. 7 int n;
  8. 8 int main()
  9. 9 {
  10. 10 multimap<string,int> c;
  11. 11 c.insert(pair<string,int>("Allen",18));
  12. 12 c.insert(pair<string,int>("Allen",201));
  13. 13 c.insert(pair<string,int>("Arim",0));
  14. 14 c.insert(pair<string,int>("Arim",9));
  15. 15 c.insert(pair<string,int>("Arim",18));
  16. 16 c.insert(pair<string,int>("Arim",10));
  17. 17 for(auto i:c) //遍历
  18. 18 {
  19. 19 cout<<i.first<<' '<<i.second<<endl;
  20. 20 }
  21. 21
  22. 22 cout<<"\n统计 key 为\"Allen\"的数目"<<endl;
  23. 23 int sum = c.count("Allen");
  24. 24 cout<<sum<<endl;
  25. 25 multimap<string,int>::iterator iter = c.find("Allen");
  26. 26
  27. 27 cout<<"\n遍历为key为 \"Allen\" 的 value"<<endl;
  28. 28 for(int i = 0 ; i < sum; i++)
  29. 29 {
  30. 30 cout<<iter->first<<' '<<iter->second<<endl;
  31. 31 iter++;
  32. 32 }
  33. 33 cout<<"\n使用 equal_range 遍历为key为 \"Allen\" 的 value"<<endl;
  34. 34 typedef multimap<string,int>::iterator GG;
  35. 35 pair<GG,GG> iterpair = c.equal_range("Allen");
  36. 36 //pair<multimap<string,int>::iterator,multimap<string,int>::iterator> iterpair = c.equal_range("Allen");
  37. 37 for(iter = iterpair.first; iter!=iterpair.second; iter++)
  38. 38 {
  39. 39 cout<<iter->first<<' '<<iter->second<<endl;
  40. 40 }
  41. 41
  42. 42 cout<<"\n删除key为\"Allen\" 的键值"<<endl;
  43. 43 c.erase("Allen");
  44. 44 for(auto i:c) //遍历
  45. 45 {
  46. 46 cout<<i.first<<' '<<i.second<<endl;
  47. 47 }
  48. 48 }
  1. ---------------------------------------------------------------------------------------------------------------------------------------------------------

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. 1 struct node{
  2. 2 int i,j;
  3. 3 };
  4. 4
  5. 5 set<node> iset; //直接定义结构体的set是不行的
  6. 6
  7. 7 //需要重载"<" 运算符
  8. 8
  9. 9 bool operator<(const node& x,const node& y)
  10. 10 {
  11. 11 return x.i < y.i; //return x.j < y.j;
  12. 12 //根据set的特性 是依据i保存 还是依据 j保存
  13. 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. mysql 省市数据

    CREATE TABLE `province` ( `id` ) DEFAULT NULL, `name` ) DEFAULT NULL ) ENGINE=INNODB DEFAULT CHARSET ...

  2. 收放卷及张力控制 PID调试技巧

    1) 小 Kp( 0.01) , 大 Ti ( 20000ms) 2)逐渐增大Kp, 减小Ti ( 20000ms – 3000ms),避免发生震荡 3)观察I-out 是否在0附近 可能原因:卷径不 ...

  3. no.1 github

    正是Github,让社会化编程成为现实. github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.它是由Chris Wanstrath ...

  4. note04-计算机网络

    4.WLAN无线局域网(wareless local area network) IEEE802.11无线以太网协议标准 基础服务集合BSS 基站AP 服务服务集合标识SSID 即wifi名 分配系统 ...

  5. Java+maven+selenium3+testng 自动化测试环境IDEA

    idea .java环境变量jdk maven安装及环境变量配置这里就不多说了,网上有很多教程 这里我们只检测一下java.maven环境是否安装成功 win+R,运行cmd命令行:mvn -v   ...

  6. 【转】ConcurrentHashMap原理分析(1.7与1.8)

    https://www.cnblogs.com/study-everyday/p/6430462.html 前言 以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超 ...

  7. [转]关于VC++ MFC中的空闲Idle处理机制!

    关键词: 先根据空闲标志以及消息队列是否为空这两个条件判断当前线程是否处于空闲状态(这个“空闲”的含义同操作系统的含义不同,是MFC自己所谓的“空闲”),如果是,就调用CWinThread::OnId ...

  8. MVC学习七:Razor布局之加载分部视图【PartialView】

    Partial View 顾名思义就是Html代码片段,应用于此HTML代码多次被页面加载时使用.(类似于WebForm程序中的用户控件) 注:PartialView和正常的View页面在访问时没有任 ...

  9. 【洛谷P3369】 (模板)普通平衡树

    https://www.luogu.org/problemnew/show/P3369 Splay模板 #include<iostream> #include<cstdio> ...

  10. Entity Framework5.0运行时错误ObjectStateManager 中已存在具有同一键的对象

    EF写了个简单的框架,在把查询出来的数据修改回去时,报了ObjectStateManager 中已存在具有同一键的对象这样一个错误,寻寻觅觅终于找到了最终的解决方案. ObjectStateManag ...