美文网首页
C++高级之SLT中的容器学习与函数谓词

C++高级之SLT中的容器学习与函数谓词

作者: Dalvik_ | 来源:发表于2021-04-08 11:07 被阅读0次

    Java集合框架 相当于 C++STL(标准模版库) #include<iostream>
    STL包的内容都是在std命名空间里面

    1.vector向量学习
    容器 封装动态大小的数组,能够存放任意的动态数组

    #include <iostream>
    
    #include <vector>
    
    using namespace std;
    
    int main() {
        vector<int> vector1; //定义一个vector容器
        vector<int> vector2(10);//定义一个 容量为10 的vector容器
        vector<int> vector3(10, 4);//定义一个 容量为10 的vector容器,并初始化为值为0
    
        vector1.insert(vector1.begin(), 99); //在vector的开头插入数据
        vector1.insert(vector1.begin(), 88);
        vector1.insert(vector1.begin(), 77);
    
        cout << vector1.front() << endl; //获取第一个元素 输出:77
        cout << vector1.back() << endl; // 获取最后一个元素 输出:99
    
        vector1.front() = 100; //修改第一个元素
        cout << vector1.front() << endl;
    
        vector1.erase(vector1.begin()); //删除第一个元素
    
        // 对vector的遍历
        for (auto iterator = vector1.begin(); iterator != vector1.end(); iterator++) {
            cout << "输出:" << *iterator << endl;
        }
    //    for (vector<int>::iterator iterator = vector1.begin(); iterator != vector1.end(); iterator++) {
    //        cout << "输出:" << *iterator << endl;
    //    }
    
        return 0;
    }
    
    

    2.stack栈学习 先进后出 后进先出
    stack<int> stack
    pop top push
    无法遍历取值

    #include <stack>
    
    int main() {
        stack<int> stack;
    
        stack.push(20);
        stack.push(30);
        stack.push(40);
        stack.push(50);
        stack.pop();
        cout << "输出:" << stack.top() << endl; //输出 40
    
        return 0;
    }
    
    

    3.queue队列学习 先进先出
    push front

    #include <queue>
    
    int main() {
        queue<int> queue;
    
        queue.push(20);
        queue.push(30);
        queue.push(40);
        queue.push(50);
    
        cout << queue.front() << endl; //输出 20
        cout << queue.back() << endl; //输出 50
        queue.pop();
        cout << queue.front() << endl; //输出 30
    
        return 0;
    }
    
    

    4.优先级队列学习
    优先级队列默认做了从大到小的排序
    priority_queue
    对vector进行了一定的封装

    #include <queue>
    int main() {
        // 默认会做从大到小的排序
        priority_queue<int> queue;
        queue.push(20);
        queue.push(40);
        queue.push(50);
        queue.push(30);
        
        // 循环代码
        while (!queue.empty()) {
            cout << "while1:" << queue.top() << endl; 
            queue.pop(); // 最前面的元素消费掉
        }
    
        return 0;
    }
    

    5.list学习
    push_front push_back
    insert
    back front erase。
    迭代器遍历

    
    #include  <list>
    
    int main() {
        list<int> list;
        list.insert(list.begin(), 20); // 在开始位置插入
        list.insert(list.begin(), 40);
        list.insert(list.begin(), 30);
        list.insert(list.begin(), 50);
    
        list.push_front(12); //在开始位置插入
        list.push_back(234); //在结束位置插入
    
        cout << list.back() << endl; //获取最后位置的数据
    
        for (auto item = list.begin(); item != list.end(); item++) {
            cout << *item << endl;
        }
        return 0;
    }
    
    

    6.set来引出谓词
    set 内部红黑树 会对存入的数据排序,但是绝对不允许元素相同
    但是set不能直接存入对象,会导致崩溃
    默认情况下 从小到大排序

    #include <set>
    
    int main() {
        set<int> setVar;
        setVar.insert(setVar.begin(), 2);
        setVar.insert(setVar.begin(), 3);
        setVar.insert(setVar.begin(), 4);
        setVar.insert(setVar.begin(), 5);
        
        pair<set<int>::iterator, bool> result = setVar.insert(4);
        if (result.second) {
            cout << "success" << endl;
            cout << *result.first << endl;
    
        } else {
            cout << "fail" << endl; //输出fail
        }
    }
    

    7.谓词:根据传入的对象返回一个布尔值的函数

    bool doCompareAction(const Person& person1, const Person& person2) {
        return person1.id < person2.id;
    };
    

    仿函数:一个结构体或者类 重载()运算符

    struct doCompareAction2 {
    public:
        bool operator() (const Person& __x, const Person& __y) {
            return __x.id < __y.id;
        }
    };
    

    相关文章

      网友评论

          本文标题:C++高级之SLT中的容器学习与函数谓词

          本文链接:https://www.haomeiwen.com/subject/eznbhltx.html