C++常見(jiàn)的stl容器與相關(guān)操作 示例解析
sort排序
針對(duì)含有迭代器的容器,可以用#include<algorithm>中的sort函數(shù)進(jìn)行排序。
默認(rèn)排序是從小到大,可以自己寫仿函數(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類似
新增元素傳送門
有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)文章
Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法
這篇文章主要介紹了Android App仿微信界面切換時(shí)Tab圖標(biāo)變色效果的制作方法,重點(diǎn)講解了圖標(biāo)的繪制技巧,需要的朋友可以參考下2016-04-04
Qt GUI圖形圖像開(kāi)發(fā)之QT表格控件QTableView詳細(xì)使用方法與實(shí)例
這篇文章主要介紹了Qt GUI圖形圖像開(kāi)發(fā)之QT表格控件QTableView詳細(xì)使用方法與實(shí)例,需要的朋友可以參考下2020-03-03
Qt連接MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn)(保姆級(jí)成功版教程)
本文主要介紹了Qt連接MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
vc++實(shí)現(xiàn)的tcp socket客戶端和服務(wù)端示例
這篇文章主要介紹了vc++實(shí)現(xiàn)的tcp socket客戶端和服務(wù)端示例,需要的朋友可以參考下2014-03-03
Trae+Qt+MSVC環(huán)境配置的實(shí)現(xiàn)示例
本文主要介紹了Trae+Qt+MSVC環(huán)境配置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
基于C++的攝像頭圖像采集及拼接程序的簡(jiǎn)單實(shí)現(xiàn)
本程序是在?ubuntu14.04?平臺(tái)下實(shí)現(xiàn)的,在本項(xiàng)目目錄下,已經(jīng)有編譯生成的可執(zhí)行程序,其中Camera_to_Frmae.cpp是我們從雙攝像頭實(shí)時(shí)抓取單幀圖像的源碼,對(duì)基于C++的攝像頭圖像采集及拼接程序的實(shí)現(xiàn)感興趣的朋友一起看看吧2022-01-01

