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

2021-04-08  本文已影响0人  Dalvik_

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;
    }
};
上一篇下一篇

猜你喜欢

热点阅读