迭代器是一種檢查容器內元素並遍歷元素的資料型別,類似指標的操作。每一種標準容器都定義了一種迭代器型別,容器迭代器的範圍左閉右開,[begin,end)。02part迭代器操作
迭代器支援以下操作
: 迭代器操作
定義正向迭代器
c::iterator it;如:vector::iterator iter
反向迭代器
c::reverse_iterator it;
基本操作
解引用*iter
獲取元素成員
iter->men
指向下個元素
iter++
指向上個元素
iter--
比較iter1 != iter2
求距離iter1 - iter2
插入迭代器01part定義①.概念插入器是一種迭代器介面卡,它接受乙個容器,生成乙個迭代器,能實現向給定容器新增元素。②.標頭檔案插入迭代器定義在標頭檔案 iterator 中。02partback_inserter①.概念back_inserter 建立乙個使用 push_back 的迭代器。②.迭代器賦值直接給迭代器賦值即可給繫結的容器插入元素。
③.其他操作支援 *iter、iter++、++iter 的操作,但是對 iter 不會做任何事情,都是返回的 iter。
vectoriv;auto it = back_inserter(iv);//建立乙個插入器*it = 1;it++;*it = 2;++it;*it = 3;it = 4;//當前 iv 中的元素為 1,2,3,4
④.演算法中應用back_inserter 可以作為演算法中的目的位置來使用。vectoriv;fill_n(back_inserter(iv),10,0);//新增10個元素到vec
如上的演算法中,相當於每次呼叫 push_back 來插入元素。
03partfront_inserter①.概念front_inserter 建立乙個使用 push_front 的迭代器。②.迭代器賦值直接給迭代器賦值即可給繫結的容器插入元素。
③.其他操作同 back_inserter ,也 支援 *iter、iter++、++iter 的操作,但是對 iter 不會做任何事情,都是返回的 iter。④.演算法中應用front_inserter 可以作為演算法中的目的位置來使用。
listlst = ;listlst2;copy(lst.cbegin(),lst.cend(),front_inserter(lst2));//
04partinserter①.概念inserter 建立乙個使用 insert 操作的迭代器,需要提供第二個引數,必須是指向給定容器的迭代器,元素將插入到該元素之前。②.迭代器賦值直接給迭代器賦值即可給繫結的容器插入元素。
③.其他操作同 back_inserter ,也 支援 *iter、iter++、++iter 的操作,但是對 iter 不會做任何事情,都是返回的 iter。④.演算法中應用inserter 可以作為演算法中的目的位置來使用。
listlst = ;listlst2;copy(lst.cbegin(),lst.cend(),inserter(lst2,lst2.begin()));//
不同與 front_inserter 每次都是在開頭新增元素,會使插入的元素順序顛倒,inserter 執行插入操作後會使使原來的迭代器後移指向新的位置,即指向的元素始終不變,不會操作元素順序顛倒。流迭代器01part定義①.概念類似容器的操作,標準庫也為輸入輸出流定義了迭代器,這些迭代器將他們對應的流當作乙個特定型別的元素序列來處理;通過使用迭代器可以用泛型演算法來操作流資料。②.標頭檔案流迭代器定義在標頭檔案 iterator 中。02part輸入流迭代器①.概念輸入流迭代器繫結到乙個輸入流物件,從流中讀取指定型別的元素,直到遇到檔案尾或者錯誤為止。②.定義輸入流迭代器定義乙個輸入流迭代器必須指定要讀取的資料型別、和繫結的流物件。istream_iteratorint_it(cin);//從 cin 讀取 int 型別元素istream_iteratorint_eof;//尾後迭代器vectorvec;while( int_it != int_eof) vec.push_back(*int_it++);//等價於以下操作vectoriv(int_it,int_eof)//從迭代器範圍構造
②.使用演算法操作流迭代器可以像容器中定義的迭代器一樣使用演算法操作流迭代器istream_iteratorin(cin),eof;cout << accumulate(in,eof,0) << endl;
03part輸出流迭代器①.概念輸出流迭代器繫結到乙個輸出流,可以對任何具有輸出運算子的型別定義 ostream_iterator。②.定義輸出流迭代器定義乙個輸出流迭代器必須指定要輸出的資料型別、和繫結的流物件。ostream_iteratorout_iter(cout," ");//將 int 型別的資料寫入輸出流 cout,每個元素後輸出 " "
③.輸出流操作可以直接給輸出流迭代器賦值來將資料寫入到輸出流物件中。*out、++out、out++ 不對 out 做任何事情,都返回 out。
④.使用演算法使用迭代器操作流物件可以方便的使用泛型演算法。
STL容器之刪除元素,迭代器失效
一.種類 值得注意的是,陣列可以和stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住remove演算法後,要加上erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為remove並不知道它現在作用於哪個容器,所以remove演算法不可能真的刪除...
STL容器之刪除元素,迭代器失效
部落格 一.種類 值得注意的是,陣列可以和stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住remove演算法後,要加上erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為remove並不知道它現在作用於哪個容器,所以remove演算法不可能...
STL容器 刪除元素,迭代器失效,選擇時機
一.種類 值得注意的是,陣列可以和 stl演算法配合,因為指標可以當作陣列的迭代器使用。二.刪除元素 如果想刪除東西,記住 remove 演算法後,要加上 erase 所謂刪除演算法,最終還是要呼叫成員函式去刪除某個元素,但是因為 remove 並不知道它現在作用於哪個容器,所以 remove 演算...