C++语言涉猎笔记(四)

集合vector

#include <iostream>
#include <vector> // 引入 vector 容器的支持

using namespace std;

int main() {
    //创建一:动态长度的集合
    vector<int> vector1;
    //创建二:长度为10的集合
    vector<int> vector2(10);
    //创建三:长度为10,每个值都为0的集合
    vector<int> vector3(10, 0);

    //集合插入,参数一为迭代器,参数二为插入值
    //vector1.begin()为位置移到最前面的迭代器
    //vector1.end()为位置移到最后面的迭代器
    vector1.insert(vector1.begin(), 40);
    vector1.insert(vector1.begin(), 30);
    vector1.insert(vector1.begin(), 20);
    vector1.insert(vector1.begin(), 10);
    vector1.insert(vector1.end(), 50);
    //vector1.front() 最前面的值
    //vector1.back() 最后面的值
    cout << vector1.front() << endl;
    cout << vector1.back() << endl;
    //直接修改最前面最后面的值
    vector1.front() = 11;
    vector1.back() = 121;
    //erase 移除元素,参数为迭代器
    vector1.erase(vector1.begin());
    //遍历集合一,通过size
    for (int i = 0; i < vector1.size(); ++i) {
        cout << vector1[i] << endl;
    }
    //遍历集合二,通过迭代器
    //vector<int>::iterator 可以简写为auto 自带类型推倒
    for (vector<int>::iterator iterator = vector1.begin(); iterator != vector1.end(); iterator++) {
        cout << *iterator << endl;
    }
    return 0;
}

集合stack(栈)

#include <iostream>
#include <stack>

using namespace std;

int main() {
    stack<int> stack;
    //push添加元素,后添加的在最前面
    stack.push(10);
    stack.push(20);
    stack.push(30);
    stack.push(40);
    //遍历只能通过弹出元素来完成,遍历结束容器就空了
    //empty方法判断栈是否是空的
    while (!stack.empty()) {
        //top方法获取顶层元素的值
        int top = stack.top();
        cout << top << endl;
        //pop把顶层元素弹出栈
        stack.pop();
    }
    return 0;
}

集合queue(队列)

#include <iostream>
#include <queue>

using namespace std;

int main() {
    queue<int> queue;
    //push添加元素,先添加的在最前面
    queue.push(10);
    queue.push(20);
    queue.push(30);
    queue.push(40);
    //front方法获取最前面的值
    //back方法获取最后面的值
    queue.front() = 11;
    queue.back() = 44;
    //遍历只能通过弹出元素来完成,遍历结束容器就空了
    //empty方法判断队列是否是空的
    while (!queue.empty()) {
        //front方法获取顶层元素的值
        int front = queue.front();
        cout << front << endl;
        //pop把第一个元素弹出队列
        queue.pop();
    }
    return 0;
}

集合priority_queue(优先级队列)

#include <iostream>
#include <queue>

using namespace std;

int main() {
    //第二个参数是内部需要一个vector,说明队列是对vector的封装
    //第三个参数是排列方式的结构体 greater<int>从小到大 less<int>从大到小
    priority_queue<int, vector<int>, greater<int>> p;
    //默认从大到小的排列即 priority_queue<int, vector<int>, less<int>>
    priority_queue<int> priorityQueue;
    priorityQueue.push(40);
    priorityQueue.push(20);
    priorityQueue.push(50);
    priorityQueue.push(30);
    priorityQueue.push(10);
    while (!priorityQueue.empty()) {
        //top方法获取顶层元素的值
        int top = priorityQueue.top();
        cout << top << endl;
        priorityQueue.pop();
    }
    return 0;
}

集合list

#include <iostream>
#include <list>

using namespace std;

int main() {
    list<int> list1;
    list<int> list2(10);
    list<int> list3(10, 10);
    //插入最前面
    list1.push_front(10);
    list1.insert(list1.begin(), 10);
    //插入最后面
    list1.push_back(20);
    list1.insert(list1.end(), 20);
    //修改最前面和最后面
    list1.front() = 11;
    list1.back() = 22;
    //删除最前面和最后面
    list1.erase(list1.begin());
//    list1.erase(list1.end());
    list1.pop_back();
    //只能使用迭代器遍历
    for (auto iterator = list1.begin(); iterator != list1.end(); iterator++) {
        cout << *iterator << endl;
    }
    return 0;
}

集合set

#include <iostream>
#include <set>

using namespace std;

int main() {
    //less<int>可省略,默认值,从小到大
    set<int, less<int>> _set;
    _set.insert(10);
    _set.insert(30);
    _set.insert(20);
    _set.insert(40);
    //返回插入结果,set无法插入相同元素
    pair<set<int, less<int>>::iterator, bool> res = _set.insert(11);
    //res.first 为第一个参数迭代器
    //res.second 为第二个参数布尔
    if (res.second) {
        cout << "插入成功" << endl;
    } else {
        cout << "插入失败" << endl;
    }
    //遍历
    for (auto it = _set.begin(); it != _set.end() ; it ++) {
        cout << *it << endl;
    }
    return 0;
}

集合map,multimap

#include <iostream>
#include <map>

using namespace std;

int main(){
    //map会对key进行排序,key不能重复
    map<int, string> _map;
    //插入第一种
    _map.insert(pair<int, string>(1, "a"));
    //插入第二种
    _map.insert(make_pair(2, "b"));
    //插入第三种
    _map.insert(map<int, string>::value_type(3, "c"));
    //插入第四种,也用于修改
    _map[4] = "d";
    _map[1] = "aa";
    //遍历
    //源码提供的迭代器:iterator(默认,从头到尾) reverse_iterator(从尾到头)  const_iterator(只读)
    for (map<int, string>::iterator it = _map.begin(); it != _map.end(); it++) {
        cout << it->first << "," << it->second << endl;
    }
    //根据key查value
    auto it = _map.find(5);
    if (it != _map.end()) {
        cout << "value = " + it->second << endl;
    } else {
        cout << "no value" << endl;
    }

    //multimap会对key排序,key可以重复,可以根据key分组,value排序
    multimap<int, string> _multimap;
    _multimap.insert(make_pair(1, "a"));
    _multimap.insert(make_pair(1, "aa"));
    _multimap.insert(make_pair(1, "aaa"));
    _multimap.insert(make_pair(2, "bbb"));
    _multimap.insert(make_pair(2, "b"));
    _multimap.insert(make_pair(2, "bb"));
    _multimap.insert(make_pair(3, "cc"));
    _multimap.insert(make_pair(3, "c"));
    _multimap.insert(make_pair(3, "ccc"));
    //遍历
    for (auto it = _multimap.begin(); it != _multimap.end(); it++) {
        cout << it->first << "," << it->second << endl;
    }
    //根据key查value
    int key = 1;
    auto multiIt = _multimap.find(key);
    while (multiIt != _multimap.end()) {
        cout << key << "->value = " + multiIt->second << endl;
        //移动迭代器指针
        multiIt++;
        //key变了跳出循环
        if (multiIt->first != key) {
            break;
        }
        //严谨性代码判断
        if (multiIt == _multimap.end()) {
            break;
        }
    }
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值