C++STL之vector模板類詳解
前言
STL標(biāo)準(zhǔn)模板庫(kù)是C++中非常有用的功能庫(kù)。本篇從vector容器開始學(xué)習(xí)STL。
vector模板類
創(chuàng)建vector對(duì)象,遍歷元素
vector
模板類在頭文件vector中,用于存儲(chǔ)數(shù)組,并采用動(dòng)態(tài)內(nèi)存分配。
創(chuàng)建一個(gè)vector
對(duì)象并初始化長(zhǎng)度,通過(guò)[]
運(yùn)算符訪問(wèn)元素:
#include <vector> using namespace std; int main(){ vector<int> vec(5); // vec length 5 vec[0] = 1; return 1; }
可以采用for循環(huán)遍歷vector元素,C++11提供了采用范圍for循環(huán)來(lái)遍歷STL容器:
for(int i=0; i < 5; i++) // general cout << vec[i] << '\n'; // equal to for(int i: vec) // range cout << i << '\n';
迭代器
迭代器是STL中,類似指針的類,指向容器中的某個(gè)元素。
創(chuàng)建一個(gè)正向迭代器:
vector<int>::iterator t; t = vec.begin(); *t = 1; // vec[0] = 1 t++; // vec[1]
迭代器就像一個(gè)指針,具有*
、++
運(yùn)算符。
容器的基本方法
STL容器都提供了一些基本方法,包括:
size()
:返回容器中的元素?cái)?shù)目swap()
:交換兩個(gè)容器的內(nèi)容begin()
:返回一個(gè)指向容器中第一個(gè)元素的迭代器end()
:返回一個(gè)指向容器末尾元素后一個(gè)元素的迭代器
此外,vector還包含一些部分容器擁有的方法:
push_back()
:在容器末尾添加一個(gè)元素pop_back()
:刪除容器末尾的元素erase()
:給定一個(gè)迭代器,刪除該迭代器指向的元素;給定兩個(gè)迭代器it1, it2,刪除容器內(nèi)區(qū)間[it1, it2)的元素insert()
:給定一個(gè)迭代器和一個(gè)元素,在該迭代器指向處插入該元素;給定三個(gè)迭代器it1, it2, it3,將容器區(qū)間[it2, it3)的元素插入到it1處。\clear()
:清除容器中所有元素
此外還有一些有用的方法,以后碰上再總結(jié)。
#include <cstdio> #include <iostream> #include <cstring> #include <vector> using namespace std; int main(){ vector<int> vec(5); vector<int> copyvec(vec); for(int i: vec) cout << i <<'\n'; cout <<'\n'; vector<int>::iterator t; t = vec.begin(); *t = 1; for(int i: vec) cout << i <<'\n'; cout << '\n'; cout << vec.size() << endl; cout << '\n'; vec.swap(copyvec); for(int i: vec) cout << i <<'\n'; cout <<'\n'; vec.insert(vec.end(), copyvec.begin(), copyvec.end()); for(int i: vec) cout << i <<'\n'; cout <<'\n'; vec.erase(vec.begin(), (vec.begin()+5)); for(int i: vec) cout << i <<'\n'; cout <<'\n'; vec.push_back(2); for(int i: vec) cout << i <<'\n'; cout <<'\n'; vec.pop_back(); for(int i: vec) cout << i <<'\n'; cout <<'\n'; vec.clear(); std::cout << vec.size() <<endl; cout << '\n'; return 1; }
STL函數(shù),sort
STL通過(guò)泛型編程的思想定義了很多STL函數(shù),用于各種容器類的通用操作,如搜索,排序等。
頭文件algorithm提供了這些STL函數(shù),以sort
排序?yàn)槔?code>sort函數(shù)參數(shù)為前后兩個(gè)迭代器以及一個(gè)比較方法:template <typename Iter> void sort (Iter first, Iter last, Compare comp);
比較區(qū)間為[first, last),comp表示函數(shù)指針:
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(){ vector<int> vec; vec.push_back(2); vec.push_back(4); vec.push_back(1); for(int i: vec) cout << i <<'\n'; cout <<'\n'; sort(vec.begin(), vec.end()); for(int i: vec) cout << i <<'\n'; cout <<'\n'; return 1; } /* 2 \n 4 \n 1 1 \n 2 \n 4 */
如果不提供比較方法,則默認(rèn)使用容器元素定義的<
進(jìn)行比較;如果提供Compare
函數(shù)指針,則根據(jù)返回的true, false
進(jìn)行排序,true
表示Compare
參數(shù)順序正確:
bool smaller(const int& a, const int& b){ if(a >= b) return true; return false; } sort(vec.begin(), vec.end(), smaller); // 4 2 1
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C語(yǔ)言大廠面試技巧及strcpy()函數(shù)示例詳解
這篇文章主要為大家介紹了C語(yǔ)言面試技巧,以strcpy()函數(shù)為示例進(jìn)行分析詳解,有需要沖刺大廠的朋友們可以借鑒參考下,希望能夠有所幫助2021-11-11c++中虛函數(shù)和純虛函數(shù)的作用與區(qū)別
這篇文章主要介紹了c++中虛函數(shù)和純虛函數(shù)的作用與區(qū)別,需要的朋友可以參考下2014-07-07C++簡(jiǎn)易通訊錄系統(tǒng)實(shí)現(xiàn)流程詳解
這篇文章主要為大家介紹了C語(yǔ)言簡(jiǎn)易版通訊錄的具體實(shí)現(xiàn)流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05C語(yǔ)言運(yùn)用回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言運(yùn)用回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10C語(yǔ)言中無(wú)符號(hào)與有符號(hào)及相加問(wèn)題
這篇文章主要介紹了C語(yǔ)言中無(wú)符號(hào)與有符號(hào)及相加問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08詳解C語(yǔ)言中結(jié)構(gòu)體的自引用和相互引用
這篇文章主要介紹了C語(yǔ)言中結(jié)構(gòu)體的自引用和相互引用,詳細(xì)解析了結(jié)構(gòu)體中指針的指向情況,需要的朋友可以參考下2016-04-04