TZOJ-STL系列题

  • C++实验:STL之vector

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

    #include <bits/stdc++.h>
    using namespace std;
    void Insert(vector<int>& v, int x) {
        for(int i = 0; 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 0;
    }
    View Code
  • 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 = 1; 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 0;
    }
    View Code
  • 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 = 1; i <= n; i++) {
            for (int j = 1; 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=0;i<vec.size();i++)
        {
            for(int j=0;j<vec[i].size();j++)
            {
                if(j)
                    cout<<" ";
                cout<<vec[i][j];
            }
            cout<<endl;
        }
        return 0;
    }
    View Code
  • C++实验:STL之stack

    #include <bits/stdc++.h>
    using namespace std;
    void Op(stack<int>& st) {
        char p[10]; int m;
        scanf("%s", p);
        // 后面只需判断p[1]是什么就好了,因为三种操作的p[1]都不同,判断单个字符效率比strcmp(p, "push")要高。
        if (p[1] == 'u') {
            scanf("%d", &m);
            st.push(m);
        } else if (p[1] == '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 0;
    }
    View Code
  • 因为栈这个容器只能访问栈顶,所以不支持迭代器的操作,也没有clear方法

  • C++实验:STL之queue

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

    因为栈这个容器只能访问队头,所以不支持迭代器的操作,也没有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 = 0; s[i] != '
  • 相关推荐