STL之再探迭代器

2021-09-23 19:31:45 字數 2603 閱讀 3477

迭代器被繫結到乙個容器上,可用來向容器插入元素。

back_inserter建立乙個使用push_back的迭代器

front_inserter建立乙個使用push_front的迭代器

inserter建立乙個使用insert的迭代器,此函式接受哦第二個引數,這個引數必須是指向乙個給定容器的迭代器。元素將被插入到給定迭代器所表示的元素之前。

list

lst = ;

list

lst1, lst2; //空list

//拷貝完成之後,lst1包含4 3 2 1

copy(lst.begin(), lst.end(), front_inserter(lst1));

//拷貝完成之後,lst2包含1 2 3 4

//inserter和back_inserter不會使插入元素序列顛倒

copy(lst.begin(), lst.end(),inserter(lst2,lst2.begin()));

迭代器被繫結到輸入或輸出流上,可用來遍歷所關聯的io流。使用需要包含

ifstream in("afile");

istream_iterator str_it(in); //從"afile"讀取資料

istream_iterator in_iter(cin); //從cin讀取int

istream_iterator eof //預設初始化,生成istream尾後迭代器

while (in_iter != eof)

更妙的用法:

istream_iterator in_iter(cin);

istream_iterator eof;

vector

vec(in_iter, eof);

這個建構函式從cin中讀取資料,直到遇到檔案尾或者遇到乙個不是int的資料為止。從流中讀取的資料被用來構造vec。

兩種建構函式:

//out將型別為t的值寫入到輸出流os中

ostream_iteratorout(os);

//out將型別為t的值寫入到輸出流os中,每個值後面都輸出乙個d

ostream_iteratorout(os, d);

使用ostream_iterator輸出值的序列的三種方式:

ostream_iterator out_iter(cout, " ");

for (auto& e : vec)

cout

《或ostream_iterator out_iter(cout, " ");

for (auto& e : vec)

cout

《或ostream_iterator out_iter(cout, " ");

copy(vec.begin(), vec.end(), out_iter);

練習題

編寫程式,接受三個引數,乙個輸入檔案和兩個輸出檔案的檔名。輸入檔案儲存整數。使用istream_iterator讀取輸入檔案,使用ostream_iterator將奇數寫入第乙個輸出檔案,每個值後面都跟乙個空格;將偶數寫入第二個輸出檔案,每個值都獨佔一行。

解題**

//#include 

#include

#include

using

namespace

std;

int pro(const

char* ch1, const

char* ch2, const

char* ch3);

int main()

int pro(const

char* ch1, const

char* ch2, const

char* ch3)

else

}}

反向迭代器就是在容器中從尾元素向首元素反向移動的迭代器。對於反向迭代器,遞增和遞減操作的含義會點到過來。除了forward_list之外,其他容器都支援反向迭代器。這些成員函式返回指向容器尾元素和首元素之前乙個位置的迭代器。

sort(vec.begin(), vec.end()); //正常排序vec,從小到大

sort(vec.rbegin(), vec.rend()); //逆序排序,從大到小

列印string物件中的單詞:

string line = "one,two,three";

//輸出第乙個單詞

auto comma = find(line.cbegin(), line.cend(), ',');

cout

cout

<這些專用的迭代器不是拷貝其中的元素,而是移動它們。

再探迭代器

除了為每個容器定義的迭代器以外,標準庫在標頭檔案iterator中還定義了額外4種迭代器 插入迭代器 流迭代器 反向迭代器 移動迭代器 插入器是一種迭代器介面卡,接受乙個容器,生成乙個插入迭代器 vector vi auto it back inserter vi back inserter是插入器...

STL之迭代器

除了為每個容器定義的迭代器之外,標準庫在標頭檔案iterator中還定義了額外幾種迭代器,包括 1 插入迭代器 insert iterator 被繫結到乙個容器上,可用來向容器插入元素。2 流迭代器 stream iterator 被繫結到輸入輸出流,可用來遍歷所關聯的io流。3 反向迭代器 rev...

STL之迭代器

我們知道,迭代器常用來訪問容器中的元素。在使用迭代器的方式上來看,和指標非常的類似,甚至於就已經當作指標來使用了。事實上,迭代器的作用就是為了提供一種訪問資料的方式。容器 container 作為標準模板庫中的乙個核心內容,給我們提供了非常強大的資料結構的支援,以便於我們能夠更加方便 高效的實現我們...