標(biāo)準(zhǔn)模板庫STL部分包含在C++標(biāo)準(zhǔn)庫中的軟件庫。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、五寨ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的五寨網(wǎng)站制作公司
c++標(biāo)準(zhǔn)庫:即以std::開頭,但是部分編譯器廠商也會把STL的內(nèi)容放在std:: namespace里面
由于一個常見的誤解,您可能會將C++標(biāo)準(zhǔn)庫視為“STL”,或者將工具鏈中C++標(biāo)準(zhǔn)庫的實現(xiàn)部分視為“STL實現(xiàn)”。
事實并非如此。
MSVC ++和GCC(作為編譯器特定的擴(kuò)展實現(xiàn))都將其放在std
命名空間中也是非常可惜的,這不僅具有高度誤導(dǎo)性,而且根據(jù)標(biāo)準(zhǔn)也是非法的。
為什么c++的名詞會這么混亂?
因為c++委員會制定標(biāo)準(zhǔn),各家編譯器廠商實現(xiàn)標(biāo)準(zhǔn)(gcc,msvc)
類似于C#中的List,長度會自動擴(kuò)容(2倍擴(kuò)容),普通的數(shù)組需要初始化長度。
vector容器是支持隨機(jī)訪問的,即可以像數(shù)組一樣用[]來取值。但不是所有的STL容器都有這個特性!
用法 | 作用 |
---|---|
vec.begin(),vec.end() | 返回vector的首、尾迭代器 |
vec.front(),vec.back() | 返回vector的首、尾元素 |
vec.push_back() | 從vector末尾加入一個元素 |
vec.size() | 返回vector當(dāng)前的長度(大小) |
vec.pop_back() | 從vector末尾刪除一個元素 |
vec.empty() | 返回vector是否為空,1為空、0不為空 |
vec.clear() | 清空vector |
先進(jìn)先出,沒有clear,也不支持遍歷
文檔:std::queue - cppreference.com
用法 | 作用 |
---|---|
q.front(),q.back() | 返回queue的首、尾元素 |
q.push() | 從queue末尾加入一個元素 |
q.size() | 返回queue當(dāng)前的長度(大小) |
q.pop() | 刪除首個元素 |
q.empty() | 返回queue是否為空,1為空、0不為空 |
后進(jìn)先出
用法 | 作用 |
---|---|
st.top() | 返回stack的棧頂元素 |
st.push() | 從stack棧頂加入一個元素 |
st.size() | 返回stack當(dāng)前的長度(大?。?/td> |
st.pop() | 從stack棧頂彈出一個元素 |
st.empty() | 返回stack是否為空,1為空、0不為空 |
string是C++風(fēng)格的字符串,而string本質(zhì)上是一個類
string和char * 區(qū)別:
char*
,管理這個字符串,是一個char*型的容器string特點:
string 類內(nèi)部封裝了很多成員方法,例如:查找find,拷貝copy,刪除delete 替換replace,插入insert
string管理char*所分配的內(nèi)存,不用擔(dān)心復(fù)制越界和取值越界等,由類內(nèi)部進(jìn)行負(fù)責(zé)
導(dǎo)入:#include
<string>
// 注意這里不是string.h,string.h是C字符串頭文件
用法 | 說明 |
---|---|
int find(const string& str, int pos = 0) const; | 查找str第一次出現(xiàn)位置,從pos開始查找 |
int compare(const string &s) const; | 字符串比較是按字符的ASCII碼進(jìn)行對比,返回值:0:=,1:>,-1:< |
string& insert(int pos, const string& str); | 插入字符串 |
string& erase(int pos, int n = npos); | 刪除從Pos開始的n個字符 |
char& operator[](int n);char& at(int n); | 獲取單個字符 |
string substr(int pos = 0, int n = npos) const; | 返回由pos開始的n個字符組成的字符串 |
參考資料:
C++ string容器_Brave Seeker的博客
\0
:是一個空字符,在cout中輸出是空的,表示字符串的結(jié)束
string str;
const char *c = str.c_str();
string str;
const char *pc = "Hello World";
str = pc;
char ch [] = "ABCDEFG";
string str(ch); //也可string str = ch;
string str="hello";
printf(“%s\n”, str); //此處出現(xiàn)錯誤的輸出
cout<<str<<endl;
用printf(“%s”,str);輸出是會出問題的。這是因為“%s”要求后面的對象的首地址。但是string不是這樣的一個類型,若一定要printf輸出。那么可以加上.c_str()。
map使用紅黑樹實現(xiàn)。查找時間在O(lg(n))-O(2*log(n))之間,構(gòu)建map花費的時間比較長
c++中的map是有序的?我使用過其它語言map都是無序的,經(jīng)測試確實是有序的
map中獲取某個值的方法:find,然后再通過first,second來取key和value
map和multimap應(yīng)該使用那一個?
在項目代碼中multimap會多一些
hash_map是 STL 的一部分,但不是標(biāo)準(zhǔn)C++ (C++11) 的一部分。在標(biāo)準(zhǔn)C++中,有一個名為“std::unordered_map”的功能類似unordered_map實現(xiàn):http://www.cplusplus.com/reference/unordered_map/unordered_map/
C++11 引入了 std::unordered_map
和hash_map沒有什么不同。
參考資料:https://stackoverflow.com/questions//is-hash-map-part-of-the-stl
hash_map 查找速度會比map快,而且查找速度基本和數(shù)據(jù)數(shù)據(jù)量大小,屬于常數(shù)級別;而map的查找速度是log(n)級別。并不一定常數(shù)就比log(n)小,hash還有hash函數(shù)的耗時,明白了吧,如果你考慮效率,特別是在元素達(dá)到一定數(shù)量級時,考慮考慮hash_map。
但若你對內(nèi)存使用特別嚴(yán)格,希望程序盡可能少消耗內(nèi)存,那么一定要小心,hash_map可能會讓你陷入尷尬,特別是當(dāng)你的hash_map對象特別多時,你就更無法控制了,而且hash_map的構(gòu)造速度較慢。
來源:C++ map和hashmap用法_qq_的博客-CSDN博客_c++ hashmap
set容器,有點像C#中的hashset,里面的元素是唯一不重復(fù)的,且內(nèi)部排好序(升序排列)。
set容器自動有序和快速添加、刪除的性質(zhì)是由其內(nèi)部實現(xiàn):紅黑樹(平衡樹的一種)
用法 | 作用 |
---|---|
s.empty() | 當(dāng)前集合是否為空,是返回1,否則返回0. |
s.size() | 當(dāng)前集合的元素個數(shù) |
s.clear() | 清空當(dāng)前集合 |
s.begin(),s.end(); | 返回集合的首尾迭代器。注意是迭代器。我們可以把迭代器理解為數(shù)組的下標(biāo)。但其實迭代器是一種指針 |
s.insert(k) | 向集合中加入元素k |
s.erase(k) | 刪除集合中元素k |
s.find(k) | 返回集合中指向元素k的迭代器。如果不存在這個元素,就返回s.end() |
用法 | 作用 |
---|---|
q.begin(),q.end() | 返回deque的首、尾迭代器 |
q.front(),q.back() | 返回deque的首、尾元素 |
q.push_back() | 從隊尾入隊一個元素 |
q.push_front() | 從隊頭入隊一個元素 |
q.pop_back() | 從隊尾出隊一個元素 |
q.pop_front() | 從隊頭出隊一個元素 |
q.clear() | 清空隊列 |
deque的特點是雙端進(jìn)出,即處于雙端隊列中的元素既可以從隊首進(jìn)/出隊,也可以從隊尾進(jìn)/出隊,它是線性容器。
deque比queue更優(yōu)秀的一個性質(zhì)是它支持隨機(jī)訪問,即可以像數(shù)組下標(biāo)一樣取出其中的一個元素。
表格數(shù)據(jù)來源:容器庫 - cppreference.com
史上最全的各種C++ STL容器全解析 - Seaway-Fu - 博客園 (cnblogs.com)
當(dāng)前名稱:c++ container容器(string,vector,map,queue,stack等等)
瀏覽路徑:http://chinadenli.net/article28/dsoiicp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)站設(shè)計公司、網(wǎng)站內(nèi)鏈、企業(yè)網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)