迭代器:迭代器是泛化的指標(但並不是指標),用法和指標類似,利用迭代器對容器中的元素序列的操作。格式舉例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....