欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++常見(jiàn)的stl容器與相關(guān)操作 示例解析

 更新時(shí)間:2022年10月19日 15:22:28   作者:Fat_Markov  
所謂容器,就是可以承載,包含元素的一個(gè)器件,它是STL六大組件之一,是容器、算法、迭代器中最重要也是最核心的一部分

sort排序

針對(duì)含有迭代器的容器,可以用#include<algorithm>中的sort函數(shù)進(jìn)行排序。

默認(rèn)排序是從小到大,可以自己寫(xiě)仿函數(shù),也可以用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()); // 反轉(zhuǎn)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的二維數(shù)組
    myVec1.push_back(10);
    myVec1.pop_back();
}

map

紅黑樹(shù)實(shí)現(xiàn)是有序容器,按照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';                 //有覆蓋數(shù)據(jù)的危險(xiǎn)
    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

無(wú)序容器,操作和map類(lèi)似

新增元素傳送門(mén)

有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++,避免迭代器實(shí)效
        }
        else{
            it++; //迭代器遞增
        }
    }
    printMap(myUnorderMap);
}

set

有序容器,會(huì)自動(dòng)排序,默認(rèn)從小到大

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

隊(duì)列

int main()
{
    queue<int> myQue; //默認(rèn)使用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();
}

創(chuàng)建容器時(shí)指定排序規(guī)則

針對(duì)有序容器使用,如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
}

到此這篇關(guān)于C++常見(jiàn)的stl容器與相關(guān)操作 示例解析的文章就介紹到這了,更多相關(guān)C++ stl容器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C?C++輸入輸出基礎(chǔ)教程示例詳解

    C?C++輸入輸出基礎(chǔ)教程示例詳解

    當(dāng)我們?cè)诰W(wǎng)站做題的時(shí)候經(jīng)常會(huì)遇到各種要求的輸入輸出,而且會(huì)有時(shí)間超限等多個(gè)問(wèn)題,這時(shí)我們就要優(yōu)化我們的輸入輸出或者規(guī)范我們的輸入輸出格式,下面介紹C和C++中的輸入輸出問(wèn)題,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-11-11
  • 詳解C++編程中的重載流插入運(yùn)算符和流提取運(yùn)算符

    詳解C++編程中的重載流插入運(yùn)算符和流提取運(yùn)算符

    這篇文章主要介紹了詳解C++編程中的重載流插入運(yùn)算符和流提取運(yùn)算符,是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • 深入理解C++之策略模式

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

    下面小編就為大家?guī)?lái)一篇深入理解C++之策略模式。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-06-06
  • C數(shù)據(jù)結(jié)構(gòu)之單鏈表詳細(xì)示例分析

    C數(shù)據(jù)結(jié)構(gòu)之單鏈表詳細(xì)示例分析

    以下是對(duì)C語(yǔ)言中的單鏈表進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • C++德州撲克的核心規(guī)則算法

    C++德州撲克的核心規(guī)則算法

    德州撲克想必很多人都玩過(guò),當(dāng)然對(duì)于新手需要說(shuō)明的是,德州指的是德克薩斯州,而不是山東德州。分享下在計(jì)算最大牌型,比牌邏輯的算法和洗牌的方法,希望對(duì)大家有幫助。
    2016-04-04
  • C語(yǔ)言基于考研的棧和隊(duì)列

    C語(yǔ)言基于考研的棧和隊(duì)列

    這篇文章主要介紹了考研時(shí)的C語(yǔ)言中的堆棧和隊(duì)列的相關(guān)資料,需要的朋友可以參考下,小編覺(jué)得這篇文章寫(xiě)的很好,希望能給你帶來(lái)幫助
    2021-08-08
  • 淺談C++基類(lèi)的析構(gòu)函數(shù)為虛函數(shù)

    淺談C++基類(lèi)的析構(gòu)函數(shù)為虛函數(shù)

    本文重點(diǎn):應(yīng)該為多態(tài)基類(lèi)聲明虛析構(gòu)器。一旦一個(gè)類(lèi)包含虛函數(shù),它就應(yīng)該包含一個(gè)虛析構(gòu)器。如果一個(gè)類(lèi)不用作基類(lèi)或者不需具有多態(tài)性,便不應(yīng)該為它聲明虛析構(gòu)器。
    2015-10-10
  • 簡(jiǎn)單談?wù)凜語(yǔ)言中的= 和==、!=

    簡(jiǎn)單談?wù)凜語(yǔ)言中的= 和==、!=

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中= 和==、!=的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 關(guān)于C++中0是十進(jìn)制還是八進(jìn)制的問(wèn)題

    關(guān)于C++中0是十進(jìn)制還是八進(jìn)制的問(wèn)題

    本篇文章中,小編將為大家介紹關(guān)于C++中0是十進(jìn)制還是八進(jìn)制的問(wèn)題,有需要的朋友可以參考一下
    2013-04-04
  • C++實(shí)現(xiàn)三子棋游戲詳細(xì)介紹(附代碼)

    C++實(shí)現(xiàn)三子棋游戲詳細(xì)介紹(附代碼)

    大家好,本篇文章主要講的是C++實(shí)現(xiàn)三子棋游戲詳細(xì)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下
    2022-01-01

最新評(píng)論