您現在的位置是:網站首頁>C++C++常見的stl容器與相關操作 示例解析

C++常見的stl容器與相關操作 示例解析

宸宸2024-04-28C++57人已圍觀

我們幫大家精選了相關的編程文章,網友傅琴軒根據主題投稿了本篇教程內容,涉及到C++、stl容器、C++、stl容器操作、C++ stl容器相關內容,已被362網友關注,如果對知識點想更進一步了解可以在下方電子資料中獲取。

C++ stl容器

sort排序

針對含有疊代器的容器,可以用#include中的sort函數進行排序。

默認排序是從小到大,可以自己寫倣函數,也可以用greater()或者less()

#include 
#include 
#include 
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 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());
    sort(myVec1.begin(), myVec1.end(), greater());
}

vector

void printVec(const vector &vec)
{
    for (auto i : vec)
    {
        cout << i << " ";
    }
    cout << endl;
}
int main()
{
    vector 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<<"找到了"<> myVec2(row, vector(col, 0)); // 初始化全0的二維數組
    myVec1.push_back(10);
    myVec1.pop_back();
}

map

紅黑樹實現是有序容器,按照key值從小到大排序,插入pair(data1,data2)

void printMap(const map &myMap)
{
    for (auto it : myMap)
    {
        cout << it.second << " ";
    }
    cout << endl;
}
int main()
{
    map 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(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 &myMap)
{
    for (auto it : myMap)
    {
        cout << it.second << " ";
    }
    cout << endl;
}
int main()
{
    unordered_map 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 &mySet)
{
    for (auto it = mySet.begin(); it != mySet.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
int main()
{
    set mySet = {1, 1, 2, 3};
    printSet(mySet);
    mySet.insert(0);
    printSet(mySet);
}

queue

隊列

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

stack

int main()
{
    stack 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 
void printSet(const set &mySet)
{
    for (auto it = mySet.begin(); it != mySet.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}
template 
void printMap(const map &mySet)
{
    for (auto it = mySet.begin(); it != mySet.end(); it++)
    {
        cout << it->second << " ";
    }
    cout << endl;
}
int main()
{
    set mySet = {1, 1, 2, 3};
    printSet(mySet); // 3 2 1
    map myMap = {{1, 'c'}, {2, 'b'}, {3, 'd'}};
    printMap(myMap); // d b c
}

到此這篇關於C++常見的stl容器與相關操作 示例解析的文章就介紹到這了,更多相關C++ stl容器內容請搜索碼辳之家以前的文章或繼續瀏覽下麪的相關文章希望大家以後多多支持碼辳之家!

我的名片

網名:星辰

職業:程式師

現居:河北省-衡水市

Email:[email protected]