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

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

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

#include 

#include 

using namespace std;

int main() {
    vector vector1; //定义一个vector容器
    vector vector2(10);//定义一个 容量为10 的vector容器
    vector 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::iterator iterator = vector1.begin(); iterator != vector1.end(); iterator++) {
//        cout << "输出:" << *iterator << endl;
//    }

    return 0;
}

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

#include 

int main() {
    stack 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 

int main() {
    queue 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 
int main() {
    // 默认会做从大到小的排序
    priority_queue 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  

int main() {
    list 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 

int main() {
    set setVar;
    setVar.insert(setVar.begin(), 2);
    setVar.insert(setVar.begin(), 3);
    setVar.insert(setVar.begin(), 4);
    setVar.insert(setVar.begin(), 5);
    
    pair::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中的容器学习与函数谓词)