C++常见的stl容器与相关操作 示例解析

 更新时间:2022年10月19日 15:22:28   作者:Fat_Markov  
所谓容器,就是可以承载,包含元素的一个器件,它是STL六大组件之一,是容器、算法、迭代器中最重要也是最核心的一部分

sort排序

针对含有迭代器的容器,可以用#include<algorithm>中的sort函数进行排序。

默认排序是从小到大,可以自己写仿函数,也可以用greater<int>()或者less<int>()

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool compfunc(const int &a, const int &b)
{
    return a > b;
}
struct compstru
{
    bool operator()(int a, int b)
    {
        return a > b;
    }
};
int main()
{
    vector<int> myVec1 = {1, 4, 9, 2};
    sort(myVec1.begin(), myVec1.end(), compstru());
    sort(myVec1.begin(), myVec1.end(), compfunc);
    sort(myVec1.begin(), myVec1.end());
    sort(myVec1.begin(), myVec1.end(), less<int>());
    sort(myVec1.begin(), myVec1.end(), greater<int>());
}

vector

void printVec(const vector<int> &vec)
{
    for (auto i : vec)
    {
        cout << i << " ";
    }
    cout << endl;
}
int main()
{
    vector<int> myVec1 = {1, 4, 9, 2};
    reverse(myVec1.begin(), myVec1.end()); // 反转vector
    printVec(myVec1);
    if(find(myVec1.begin(), myVec1.end(), 4)!=myVec1.end()){ //查找4是不是在vector里面
        cout<<"找到了"<<endl;
    }
    int row = 5;
    int col = 10;
    vector<vector<int>> myVec2(row, vector<int>(col, 0)); // 初始化全0的二维数组
    myVec1.push_back(10);
    myVec1.pop_back();
}

map

红黑树实现是有序容器,按照key值从小到大排序,插入pair<type1,type2>(data1,data2)

void printMap(const map<int, char> &myMap)
{
    for (auto it : myMap)
    {
        cout << it.second << " ";
    }
    cout << endl;
}
int main()
{
    map<int, char> myMap = {{3, 'c'}, {2, 'b'}, {1, 'a'}};
    printMap(myMap); // a b c
    myMap.insert({4, 'd'});
    printMap(myMap);                       // a b c d
    myMap.insert(pair<int, char>(0, 'e')); // e a b c d
    printMap(myMap);
    myMap[6] = 'g';                 //有覆盖数据的危险
    printMap(myMap);                // e a b c d g
    cout << myMap.count(3) << endl; // map的查找,返回1或0
    auto it = myMap.find(3);
    cout << it->second << endl; // c
    if (myMap.find(3) != myMap.end())
    {
        cout << myMap[3] << endl; // c
    }
}

unordered_map

无序容器,操作和map类似

新增元素传送门

有insert和emplace

void printMap(const unordered_map<int, char> &myMap)
{
    for (auto it : myMap)
    {
        cout << it.second << " ";
    }
    cout << endl;
}
int main()
{
    unordered_map<int,char> myUnorderMap={{1,'a'},{2,'b'},{3,'d'}};
    printMap(myUnorderMap);
    myUnorderMap.emplace(4,'e');
    myUnorderMap.insert({5,'d'});
    printMap(myUnorderMap);
    for(auto it=myUnorderMap.begin();it!=myUnorderMap.end();){
        if(it->first==1){
            myUnorderMap.erase(it++); //删除要使用it++,避免迭代器实效
        }
        else{
            it++; //迭代器递增
        }
    }
    printMap(myUnorderMap);
}

set

有序容器,会自动排序,默认从小到大

void printSet(const set<int> &mySet)
{
    for (auto it = mySet.begin(); it != mySet.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
int main()
{
    set<int> mySet = {1, 1, 2, 3};
    printSet(mySet);
    mySet.insert(0);
    printSet(mySet);
}

queue

队列

int main()
{
    queue<int> myQue; //默认使用deque作容器适配器
    for (int i = 0; i < 3; i++)
    {
        myQue.push(i);
    }
    int top = myQue.front();
    myQue.pop();
}

stack

int main()
{
    stack<int> mystack;
    for(int i=0;i<4;i++){
        mystack.push(i);
    }
    int top = mystack.top();
    mystack.pop();
}

创建容器时指定排序规则

针对有序容器使用,如map,set。vector和unordered_map则不行

struct compstru
{
    bool operator()(int a, int b)
    {
        return a > b;
    }
};
template <class T1, class T2>
void printSet(const set<T1, T2> &mySet)
{
    for (auto it = mySet.begin(); it != mySet.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
template <class T1, class T2, class T3>
void printMap(const map<T1, T2, T3> &mySet)
{
    for (auto it = mySet.begin(); it != mySet.end(); it++)
    {
        cout << it->second << " ";
    }
    cout << endl;
}
int main()
{
    set<int, compstru> mySet = {1, 1, 2, 3};
    printSet<int, compstru>(mySet); // 3 2 1
    map<int, char, compstru> myMap = {{1, 'c'}, {2, 'b'}, {3, 'd'}};
    printMap<int, char, compstru>(myMap); // d b c
}

到此这篇关于C++常见的stl容器与相关操作 示例解析的文章就介绍到这了,更多相关C++ stl容器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C C++输入输出基础教程示例详解

    C C++输入输出基础教程示例详解

    当我们在网站做题的时候经常会遇到各种要求的输入输出,而且会有时间超限等多个问题,这时我们就要优化我们的输入输出或者规范我们的输入输出格式,下面介绍C和C++中的输入输出问题,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2023-11-11
  • 详解C++编程中的重载流插入运算符和流提取运算符

    详解C++编程中的重载流插入运算符和流提取运算符

    这篇文章主要介绍了详解C++编程中的重载流插入运算符和流提取运算符,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • 深入理解C++之策略模式

    深入理解C++之策略模式

    下面小编就为大家带来一篇深入理解C++之策略模式。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • C数据结构之单链表详细示例分析

    C数据结构之单链表详细示例分析

    以下是对C语言中的单链表进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • C++德州扑克的核心规则算法

    C++德州扑克的核心规则算法

    德州扑克想必很多人都玩过,当然对于新手需要说明的是,德州指的是德克萨斯州,而不是山东德州。分享下在计算最大牌型,比牌逻辑的算法和洗牌的方法,希望对大家有帮助。
    2016-04-04
  • C语言基于考研的栈和队列

    C语言基于考研的栈和队列

    这篇文章主要介绍了考研时的C语言中的堆栈和队列的相关资料,需要的朋友可以参考下,小编觉得这篇文章写的很好,希望能给你带来帮助
    2021-08-08
  • 浅谈C++基类的析构函数为虚函数

    浅谈C++基类的析构函数为虚函数

    本文重点:应该为多态基类声明虚析构器。一旦一个类包含虚函数,它就应该包含一个虚析构器。如果一个类不用作基类或者不需具有多态性,便不应该为它声明虚析构器。
    2015-10-10
  • 简单谈谈C语言中的= 和==、!=

    简单谈谈C语言中的= 和==、!=

    这篇文章主要给大家介绍了关于C语言中= 和==、!=的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 关于C++中0是十进制还是八进制的问题

    关于C++中0是十进制还是八进制的问题

    本篇文章中,小编将为大家介绍关于C++中0是十进制还是八进制的问题,有需要的朋友可以参考一下
    2013-04-04
  • C++实现三子棋游戏详细介绍(附代码)

    C++实现三子棋游戏详细介绍(附代码)

    大家好,本篇文章主要讲的是C++实现三子棋游戏详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01

最新评论