c++ 順序容器學習

來源:互聯網
上載者:User

標籤:

所謂容器,就是一個裝東西的盒子,在c++中,我們把裝的東西叫做“元素”

而順序容器,就是說這些東西是有順序的,你裝進去是什麼順序,它們在裡面就是什麼順序。

c++中的順序容器一共有這麼幾種:

vector 可變大小數組
deque 雙端隊列
list 雙向鏈表
forward_list 單向鏈表
array 固定數組大小
string 與vector相似的容器,但專門用於儲存字元

這些容器可以讓我們方便地放元素,取元素,but,她們在:添加、刪除、非順序訪問,這些方面的效能都是不同滴(根據需要適當選擇)

列了一大堆,就是為了有個印象,不知道她們是幹啥的,後面慢慢學...

先不要逐個的去學,我們先來看一下共性的東西,下面是所有容器類型都提供的操作

類型別名  
iterator 迭代器
const_iterator 唯讀迭代器
size_type unsigned int,保證可以存下此種容器的最大可能長度
difference_type int, 足夠儲存兩個迭代器之間的距離,是有符號的
value_type 元素類型
reference 元素的左實值型別,即value_type&
const_reference 即const value_type &
建構函式  
C c 預設建構函式,構造空容器
C c1(c2) 構造了c1,內容是拷貝c2的
C c(b, e) 構造c,將迭代器b和e指定的範圍內的元素拷貝到c
C c{a, b, c...} 列表初始化c
賦值與swap  
c1 = c2

將c1中的元素替換為c2中的元素

c1 = {a,b,c...} 將c1中的元素替換為列表中的元素(array不適用)
a.swap(b) 交換a,b的元素
大小  
c.size()

c中元素的數目(forward_list不適用)

c.max_size() c可儲存的最大元素數目
c.empty() c是否為空白,空true,不空false
添加/刪除元素  
c.insert(args) 將args中的元素拷貝進c
c.emplace(inits) 使用inits構造c中的一個元素
c.erase(args) 刪除args指定的元素
c.clear() 刪除c中的所有元素,返回void
關係運算子  
==, != 是否相等,是否不等
<, <=, >. >= 關係運算子
擷取迭代器  
c.begin(), c.end() 擷取首元素,尾元素之後位置,的迭代器
c.cbegin(), c.cend() 返回const_iterator
反向容器的額外成員  
reverse_iterator 反著定址的迭代器
const_reverse_interator 唯讀逆序迭代器
c.rbegin(), c.rend() 尾元素,首元素之前的迭代器
c.crbegin(), c.crend() 返回const_reverse_iterator

好多...我都敲暈乎了

先有蛋才有雞,首先我們來看“建構函式",一共分這麼幾種:

(1) 預設初始化; (2) 拷貝初始化; (3) 列表初始化; (4) 迭代器初始化; (5) 順序容器特有初始化

用vector做個栗子,代碼如下:

 1 #include <iostream> 2 #include <vector> 3  4 using namespace std; 5  6 int main() 7 { 8     vector<int> vec1; //預設初始化 9     vector<int> vec2{1,2,3,4};  //列表初始化10     vector<int> vec3{5,6,7,8};11     vec3 = vec2;12     vector<int> vec4(vec3); //拷貝初始化13     vector<int> vec5(vec4.begin()+1, vec4.end()-1); //迭代器初始化14     vector<int> vec6(10,2);  //順序容器特有初始化15     return 0;16 }
seq_container_definition

執行結果gdb看一下:

好,然後我們來看一下迭代器,以及begin()和end()

迭代器和指標差不多,反正就是讓我們來遍曆著訪問元素的,begin()取到第一個元素,end()取到?尾元素的後一個位置(one past the last element)

下面貼個snippet來看她的使用:

 1 #include <iostream> 2 #include <string> 3  4 using namespace std; 5  6 int main() 7 { 8     string s("time for lunch"); 9     string::iterator iter = s.begin();10     while(iter != s.end()){11         *iter = toupper(*iter);12         iter++;13     }   14     cout << s << endl;15     return 0;16 }
seq_container_iterator

注意一點就是:如果你往容器物件裡添加或者刪除了元素,也即改變了對象容量,那麼對象上原有的迭代器就會失效

 

c++ 順序容器學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.