• C++实验:STL之vector

    #include <bits/stdc++.h>
    using namespace std;
    void Input(vector<int>& v) {
    int n, m;
    scanf("%d", &n);
    for (int i = ; i <= n; i++) {
    scanf("%d", &m);
    v.push_back(m);
    }
    }
    int main()
    {
    vector<int> vec;
    Input(vec);
    for(int i=;i<vec.size();i++)
    {
    cout<<vec[i]<<endl;
    }
    return ;
    }
  • C++实验:STL之vector2

    #include <bits/stdc++.h>
    using namespace std;
    void Insert(vector<int>& v, int x) {
    for(int i = ; i < v.size(); i++) // 由于vector内存中的存储方式是连续的,所以可以用下标直接访问,当然也可以用迭代器访问
    {
    if (v[i] == x) return; // 找到x说明不需要插入,直接返回
    }
    v.insert(v.begin(), x); // 在第x个数后面插入一个y可以写成v.insert(v.begin() + x, y);因为内存连续,所以迭代器也能直接加x
    }
    int main()
    {
    vector<int> vec;
    int n, x;
    cin>>n;
    while(n--)
    {
    cin>>x;
    Insert(vec, x);
    }
    for(vector<int>::iterator it=vec.begin();it!=vec.end();it++)
    {
    cout<<*it<<endl;
    }
    return ;
    }
  • C++实验:STL之vector3

    #include <bits/stdc++.h>
    using namespace std;
    bool Input(vector<int>& v) { // 返回值表示是否还有输入
    int n, m;
    v.clear();
    if (scanf("%d", &n) == EOF) return false;
    for (int i = ; i <= n; i++) {
    scanf("%d", &m);
    v.push_back(m);
    }
    return true;
    }
    bool cmp(int a, int b) {
    return a > b;
    }
    void Sort(vector<int>& v) {
    // sort的三个参数,排序的起始地址,排序的尾地址,比较函数
    sort(v.begin(), v.end(), cmp);
    }
    int main()
    {
    vector<int> vec;
    while(Input(vec))
    {
    Sort(vec);
    for(vector<int>::iterator it=vec.begin();it!=vec.end();it++)
    {
    if(it!=vec.begin())
    cout<<" ";
    cout<<*it;
    }
    cout<<endl;
    } return ;
    }
  • C++实验:STL之vector4

    #include <bits/stdc++.h>
    using namespace std;
    int Input(vector< vector<int> >& v1) {
    int n, m, k;
    scanf("%d%d", &n, &m);
    vector<int> v2;
    for (int i = ; i <= n; i++) {
    for (int j = ; j <= m; j++) {
    scanf("%d", &k);
    v2.push_back(k);
    }
    v1.push_back(v2);// STL容器里还可以套其他容器,这里把v2当参数传进去
    v2.clear();
    }
    }
    int main()
    {
    vector< vector<int> > vec;
    Input(vec);
    for(int i=;i<vec.size();i++)
    {
    for(int j=;j<vec[i].size();j++)
    {
    if(j)
    cout<<" ";
    cout<<vec[i][j];
    }
    cout<<endl;
    }
    return ;
    }
  • C++实验:STL之stack

    #include <bits/stdc++.h>
    using namespace std;
    void Op(stack<int>& st) {
    char p[]; int m;
    scanf("%s", p);
    // 后面只需判断p[1]是什么就好了,因为三种操作的p[1]都不同,判断单个字符效率比strcmp(p, "push")要高。
    if (p[] == 'u') {
    scanf("%d", &m);
    st.push(m);
    } else if (p[] == 'o') {
    if (!st.empty()) // 数据可能有空栈pop的情况
    st.pop();
    } else {
    while (!st.empty()) st.pop();
    }
    }
    int main()
    {
    stack<int> st;
    int n;
    cin>>n;
    while(n--)
    {
    Op(st);
    }
    while(!st.empty())
    {
    cout<<st.top()<<endl;
    st.pop();
    }
    return ;
    }

    因为栈这个容器只能访问栈顶,所以不支持迭代器的操作,也没有clear方法

  • C++实验:STL之queue

    #include <bits/stdc++.h>
    using namespace std;
    int tail; // 因为队列只能访问队头,所以如果想访问队尾我们只能手动记录最后一次入队的是谁。
    void Op(queue<int>& st) {
    char p[]; int m;
    scanf("%s", p);
    if (p[] == 'u') {
    scanf("%d", &m);
    st.push(m);
    tail = m;
    } else if (p[] == 'o') {
    if (!st.empty()) st.pop();
    } else if (p[] == 'l') {
    while (!st.empty()) st.pop();
    } else if (p[] == 'i') {
    if (!st.empty()) printf("%d\n", st.front());
    } else {
    if (!st.empty()) printf("%d\n", tail);
    }
    }
    int main()
    {
    queue<int> qu;
    int n;
    cin>>n;
    while(n--)
    {
    Op(qu);
    }
    while(!qu.empty())
    {
    cout<<qu.front()<<endl;
    qu.pop();
    }
    return ;
    }

    因为栈这个容器只能访问队头,所以不支持迭代器的操作,也没有clear方法

  • C++实验:STL之priority_queue

    #include <bits/stdc++.h>
    using namespace std;
    // 优先队列,在普通队列的基础上增加了自动排序的功能,默认会把最大元素放到队头
    void Input(priority_queue<char>& qu) {
    string s;
    cin >> s;
    for (int i = ; s[i] != '\0'; i++)
    qu.push(s[i]);
    }
    int main()
    {
    priority_queue<char> qu;
    int n;
    cin>>n;
    while(n--)
    {
    Input(qu);
    while(!qu.empty())
    {
    cout<<qu.top();
    qu.pop();
    }
    cout<<endl;
    }
    return ;
    }
  • C++实验:STL之map

    #include <bits/stdc++.h>
    using namespace std;
    void Input(map<string, int>& mp) {
    int n; string s;
    cin >> n;
    for (int i = ; i <= n; i++) {
    cin >> s;
    mp[s] ++;
    }
    }
    int main()
    {
    int m;
    map<string, int> sm;
    Input(sm);
    cin>>m;
    while(m--)
    {
    string s;
    cin>>s;
    cout<<sm[s]<<endl;
    }
    return ;
    }
  • C++实验:STL之priority_queue2

    #include <bits/stdc++.h>
    using namespace std;
    // greater<char> >这中间的空格不能少,否则 >> 两个尖括号连在一起会被认为是右移运算符。
    priority_queue<char, vector<char>, greater<char> > qu;
    void Input() {
    string s;
    cin >> s;
    for (int i = ; s[i] != '\0'; i++)
    qu.push(s[i]);
    }
    int main()
    {
    int n;
    cin>>n;
    while(n--)
    {
    Input();
    while(!qu.empty())
    {
    cout<<qu.top();
    qu.pop();
    }
    cout<<endl;
    }
    return ;
    }
  • C++实验:STL之priority_queue3

    #include <bits/stdc++.h>
    using namespace std;
    struct Point {
    int x, y;
    // 因为Point是我们自己定义的一个数据类型,优先队列要排序不知道该怎么排,所以要实现小于号的重载
    friend bool operator < (Point a, Point b) {
    if (a.x != b.x) return a.x > b.x;
    else return a.y > b.y;
    }
    };
    priority_queue<Point> qu;
    void Input() {
    int n; scanf("%d", &n);
    Point p;
    for (int i = ; i <= n; i++) {
    scanf("%d%d", &p.x, &p.y);
    qu.push(p);
    }
    }
    int main()
    {
    int n;
    cin>>n;
    while(n--)
    {
    Input();
    while(!qu.empty())
    {
    Point p = qu.top();
    cout<<p.x<<" "<<p.y<<endl;
    qu.pop();
    }
    }
    return ;
    }

    关于实现小于号那一部分可以看成是在结构体里写了一个像sort的cmp一样的东西,只不过写法不一样而已,实现了小于号两个Point之间就能进行比大小了

  • C++实验:STL之全排列

    #include <bits/stdc++.h>
    using namespace std;
    void Permutation(vector<int> v) {
    sort(v.begin(), v.end());
    do {
    printf("%d", v[]);
    for (int i = ; i < v.size(); i++)
    printf(" %d", v[i]);
    puts("");
    } while (next_permutation(v.begin(), v.end())); // 求v的下一个排列。1,2,3的下一个排列是1,3,2。会直接改变原数组
    }

    全排列的函数在acm的比赛中用处不是很大(因为需要全排列就说明算法效率低),但是蓝桥杯比赛基本每年都考。

  • C++实验:STL之upper_bound

    #include <bits/stdc++.h>
    using namespace std;
    void PrintFind(vector<int> v, int x) {
    // upper_bound内部是用二分实现的,还记得育英比赛的唐伯虎点秋香的一题吗,所以为了二分,要先将v排好序
    sort(v.begin(), v.end());
    // upper_bound(查找首地址,查找尾地址,查找的元素),返回第一个大于查询元素的元素地址。
    vector<int>::iterator it = upper_bound(v.begin(), v.end(), x);
    // printf("%d\n", *it);
    if (it == v.end()) puts("None"); // 当不存在的时候返回v.end();
    else printf("%d\n", it - v.begin() + ); // 为了得到下标减一下v.begin() + 1;
    }
    int main()
    {
    vector<int> vec;
    int n, a, x;
    cin>>n>>x;
    while(n--)
    {
    int a;
    cin>>a;
    vec.push_back(a);
    }
    PrintFind(vec, x);
    return ;
    }
  • C++实验:STL之upper_bound

    #include <bits/stdc++.h>
    using namespace std;
    void PrintFind(vector<int> v, int x) {
    // lower_bound内部是用二分实现的,还记得育英比赛的唐伯虎点秋香的一题吗,所以为了二分,要先将v排好序
    sort(v.begin(), v.end());
    // lower_bound(查找首地址,查找尾地址,查找的元素),返回第一个大于或等于查询元素的元素地址。
    vector<int>::iterator it = lower_bound(v.begin(), v.end(), x);
    // printf("%d\n", *it);
    if (it == v.end()) puts("None"); // 当不存在的时候返回v.end();
    else printf("%d\n", it - v.begin() + ); // 为了得到下标减一下v.begin() + 1;
    }
    int main()
    {
    vector<int> vec;
    int n, a, x;
    cin>>n>>x;
    while(n--)
    {
    int a;
    cin>>a;
    vec.push_back(a);
    }
    PrintFind(vec, x);
    return ;
    }

TZOJ-STL系列题的更多相关文章

  1. 《STL系列》之map原理及实现

    上一篇文章<STL系列>之vector原理及实现,介绍了vector的原理及实现,这篇文章介绍map的原理及实现.STL实现源码下载.STL中map的实现是基于RBTree的,我在实现的时 ...

  2. Gengxin讲STL系列目录

    引言:有人催我写关于STL的博客#(滑稽)        STL嘛,昨晚有人一直逼问我STL名字的由来——STL = Standard Template Library,标准模板库,惠普实验室开发的一 ...

  3. 跟我学STL系列(1)——STL入门介绍

    一.引言 最近这段时间一直都在自学C++,所以这里总结下自己这段时间的学习过程,通过这种方式来巩固自己学到的内容和以备后面复习所用,另外,希望这系列文章可以帮助到其他自学C++的朋友们. 由于本人之前 ...

  4. Gengxin讲STL系列——Set

    本系列第二篇blog 第一篇写的心潮澎湃,结果写完一看,这都是些什么玩意= =| Set的中文名称是“集合”.集合,高一数学必修一课本给出的定义已经很明确了,简单来讲就是一个不含重复元素的空间(个人定 ...

  5. hdu4585 STL水题

    题意:       成立少林寺,刚开始有一个大师,id是1,攻击力是10E,现在陆续来人,每个人有自己的id,和自己的攻击力,但是每一个新来的要和之前的和尚pk,他必须选择和他攻击力差值最小的那个,如 ...

  6. 《STL系列》之vector原理及实现

    最近忙得蛋疼,但还是想写点属于自己的东西.也不知道写点啥,最后决定试着自己实现STL中常用的几个集合,一来加深自己对STL的理解,二来看看自己是否有这个能力实现.实现目标就是:1能和STL兼容:2最大 ...

  7. Gengxin讲STL系列——Queue和Stack

    第三篇. 感觉队列和栈是必须的……所以决定加上这两个…… 我发现我已经买域名买上隐了……今天又买了个.top……真是智障…… Queue(队列FIFO)和Statk(栈LIFO). 那么为什么要这两个 ...

  8. Gengxin讲STL系列——String

    衔接上一篇引导. 作为第一篇博客,就要大气一点. 可我好像并不知道怎么才能让自己的博客大气一点= =: 明天是我生日,自己先买个中文域名庆祝了一下…… 好了,废话说完了,结果博客也没大气到哪去……,正 ...

  9. STL系列

    STL—对象的构造与析构 STL—内存的配置与释放 STL—vector STL—vector空间的动态增长

随机推荐

  1. HDU 1298 T9 字典树+DFS

    必须要批评下自己了,首先就是这个题目的迟疑不定,去年做字典树的时候就碰到这个题目了,当时没什么好的想法,就暂时搁置了,其实想法应该有很多,只是居然没想到. 同样都是对单词进行建树,并插入可能值,但是拨 ...

  2. 干货 | 京东技术中台的Flutter实践之路

    在 2019 年,Flutter 推出了多个正式版本,支持的终端越来越多,使用的项目也越来越多.Flutter 正在经历从小范围尝鲜到大面积应用的过程,越来越多的研发团队加入到 Flutter 的学习 ...

  3. ab工具压接口的时候post传参问题

    ab  -n 10000 -c 40 -p  [参数所在文件] -T 'application/json'  http://xxx 以上命令, 压测需要post json格式的参数的api时, 一定注 ...

  4. PAT B1045 快速排序

    题目如下: 1045 快速排序 (25 point(s)) 著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到 ...

  5. 0CTF-2016-piapiapia-PHP反序列化长度变化尾部字符串逃逸

    0X00 扫描一下网站目录,得到网站源码,这里说下工具使用的是dirmap,亲测御剑不好用... 0x01 审计源码: index.php <?php require_once('class.p ...

  6. 线性可分支持向量机与软间隔最大化--SVM(2)

    线性可分支持向量机与软间隔最大化--SVM 给定线性可分的数据集 假设输入空间(特征向量)为,输出空间为. 输入 表示实例的特征向量,对应于输入空间的点: 输出 表示示例的类别. 我们说可以通过间隔最 ...

  7. android studio 3.2 查看Deveice Monitor

    View菜单下面的 Tool Windows 下面的 Devecie File Explorer

  8. 第一行代码新闻例子报错 Unable to start activity ComponentInfo 原因

    E/AndroidRuntime: FATAL EXCEPTION: main Process: com.timemanager.jason.fragmentbestpractice, PID: 56 ...

  9. Python 安装zbar-py时出现 无法打开包括文件: “unistd.h” no such file or directory

    问题 途中使用的命令是cl.exe,在执行命令的时候找不到对应的unistd.h文件. unistd.h是Unix系统的文件,因此,十有八九,使用的是Windows系统.下面的代码可以修复,但是如果修 ...

  10. ZJNU 2212 - Turn-based game

    Mr.Lee每隔1/x s攻击一次,cpu每隔1/y s攻击一次 因为时间与答案无关,最后只看boss受到了多少次攻击 所以可以在每个人的频率上同时乘以xy 即Mr.Lee每隔y s攻击一次,cpu每 ...