STL 容器與迭代器

2021-08-21 12:27:43 字數 2262 閱讀 9505

迭代器:迭代器是泛化的指標(但並不是指標),用法和指標類似,利用迭代器對容器中的元素序列的操作。格式舉例list::itrerator it;

迭代器本身是乙個物件,這個物件可以遍歷stl容器內部全部的物件,它能夠反覆地對stl容器內容進行訪問。迭代器所提供的基本操作如下所示:

a.獲取當前被指向的元素,用「*」 或者「->」

b.指向下乙個元素,迭代器的增量使用運算子「++」

c.相等,使用運算子「==」

1.empty()函式

empty:空的;empty()函式返回值為bool型別,用於判斷容器是否為空,若為空,則返回真(true/1),若不為空,則返回假(false/0);

2.size()函式:返回容器內元素個數

3.pair

在標頭檔案utility中(ps:無需在寫此標頭檔案,在map中包含有),定義了乙個類模板pair,用於將兩個資料組成乙個資料,用來表示乙個二元組或乙個元素對,兩個資料型別可為不同型別。

eg:pairp1;      make_pair(1, 'a');    cout << p1.first << " " << p1.second << endl; //也可定義pair型別陣列

4.stack(堆疊)與queue(佇列)容器

stack(堆疊):定義在標頭檔案中,定義格式為:stacks; (ps:先入棧的後出棧)

入棧:s.push(value);

出棧:s.pop();//只刪除頂部元素,並不返回該元素

訪問棧頂:s.top()//返回棧頂元素,即為最後入棧的元素

queue(佇列):定義在標頭檔案中,格式:queueq;(ps:入隊順序排列)

入隊:q.push(value); //將資料接到佇列的末端

出隊:q.pop();//彈出佇列中的第乙個元素,但並不會返回該元素

訪問隊首元素:q.front(),即最早壓人佇列的元素

訪問隊尾元素:q.back(),即最後被壓入佇列的元素

5.vector(向量)容器:定義在標頭檔案中,格式為vectorv;

關於capacity(容器容量):當vector容器容量不夠時,在申請空間時,申請後的大小是以前的2倍,且在刪除容器內元素時,並不會將被刪除元素的空間釋放(目的提高效率)。呼叫v.capacity()用於返回容器容量

尾部插入與刪除:v.push_back(value);尾部插入元素,v.pop_back();尾部刪除元素

插入(insert)與刪除(erase):v.insert(pos, value)在pos位置上插入元素value,返回新資料的位置,v.erase(pos),移除pos位置上的元素,返回下乙個資料的位置(該種插入與刪除效率較低,慎用!且pos為迭代器型別,不可使用數字)

獲取頭部與尾部元素:v.front();和v.back();獲取頭部與尾部的元素

v.begin();與v.end();獲取頭部與尾部的迭代器(ps:end()是返回最後乙個元素後的迭代器,即改迭代器指向的容器位置並未有元素或元素已被刪除);

6.deque(雙端佇列):定義在標頭檔案中,格式為dequed;與vector(向量)類似;外加如下:

頭部新增與刪除元素:d.push_front(value);  向頭部插入元素;d.pop_front()刪除頭部元素

8.set(集合)容器與multiset(允許出現重複元素的集合)容器:分別定義在標頭檔案與中,用法相似,以下以set為例。格式為sets;

查詢與統計:s.find(value);用與查詢value元素,返回值為迭代器,若找到返回該元素位置,若未找到,則返回s.end();

s.count(value);用於統計value的個數

插入與刪除:s.insert(value)插入value元素;s.erase(value),刪除value元素

ps:該容器在插入元素後會自動排序預設為ascii值公升序排序,若改變排序方式可在定義式寫為set> s;(降序),less<>(公升序);

9.map(關聯陣列)容器與multimap(允許出現重複key值的關聯陣列)容器:分別定義在標頭檔案與中,用法類似,用與儲存元素對(key-value)對映型別,可使用鍵(key)作為下標來獲取對應的值。關聯的本質就在於元素的值與某個特定的鍵相關聯,而不是通過在陣列中的位置來獲取。格式為mapm;

使用pair<>構建鍵值對物件   m.insert(pair(value, value));

使用make_pair()函式構建鍵值對物件:m.insert(make_pair(value, value));

使用value_type標誌 : m.insert(map::value_type(value, value));

STL容器特徵總結與迭代器失效

內部資料結構 連續儲存,例如陣列。隨機訪問每個元素,所需要的時間為常量。在末尾增加或刪除元素所需時間與元素數目無關,在中間或開頭增加或刪除元素所需時間隨元素數目呈線性變化。可動態增加或減少元素,記憶體管理自動完成,但程式設計師可以使用reserve 成員函式來管理記憶體。迭代器失效 插入 vecto...

STL容器迭代器失效問題

眾所周知當使用乙個容器的insert或者erase函式通過迭代器插入或刪除元素 可能 會導致迭代器失效,因此很多建議都是讓我們獲取insert或者erase返回的迭代器,以便用重新獲取新的有效的迭代器進行正確的操作 view plaincopy to clipboardprint?iter vec....

STL容器迭代器失效問題

眾所周知當使用乙個容器的insert或者erase函式通過迭代器插入或刪除元素 可能 會導致迭代器失效,因此很多建議都是讓我們獲取insert或者erase返回的迭代器,以便用重新獲取新的有效的迭代器進行正確的操作 view plaincopy to clipboardprint?iter vec....