STL游標 迭代器(itertor)的使用

2021-08-04 14:43:58 字數 1984 閱讀 8915

摘抄自

使用前要注意加上標頭檔案

#include

迭代器實際上是一種泛化指標,如果乙個迭代器指向了容器中的某一成員,那麼迭代器將可以通過自增自減來遍歷容器中的所有成員。迭代器是聯絡容器和演算法的媒介,是演算法操作容器的介面。在運用演算法操作容器的時候,我們常常在不知不覺中已經使用了迭代器。

stl中定義了6種迭代器:

輸入迭代器,在容器的連續區間內向前移動,可以讀取容器內任意值;

輸出迭代器,把值寫進它所指向的佇列成員中;

前向迭代器,讀取佇列中的值,並可以向前移動到下一位置(++p,p++);

雙向迭代器,讀取佇列中的值,並可以向前向後遍歷容器;

隨機訪問迭代器,vector::iterator,list::iterator等都是這種迭代器 ;

流迭代器,可以直接輸出、輸入流中的值

下面的例子用到了輸入輸出迭代器

#include 

#include

#include

#include

#include

using

namespace

std;

int main()

/* vectorvec1(istream_iterator(file1), istream_iterator());

這種方式會報錯,請問為什麼*/

copy(istream_iterator(file1), istream_iterator(), inserter(v1, v1.begin()));

copy(v1.begin(),v1.end(), ostream_iterator(cout, "\n"));

cout

<< endl;

return

0;}

這裡用到了輸入迭代器istream_iterator,輸出迭代器ostream_iterator。程式完成了將乙個檔案輸出到螢幕的功能,先將檔案讀入,然後通過輸入迭代器把檔案內容複製到型別為字串的向量容器內,最後由輸出迭代器輸出。inserter是乙個輸入迭代器的乙個函式(迭代器介面卡),它的使用方法是:

inserter (container ,pos);

container是將要用來存入資料的容器,pos是容器存入資料的開始位置。上例中,是把檔案內容存入(copy())到向量v1中。

函式註解:

1.ifstream

在fstream類中,有乙個成員函式open(),就是用來開啟檔案的,其原型是:

void open(const

char* filename,int mode,int access);

如果open函式只有檔名乙個引數,則是以讀/寫普通檔案開啟,即:

file1.open("c:");

等價於file1.open("c:",ios::in|ios::out,0);

另外,fstream還有和open()一樣的建構函式,對於上例,在定義的時侯就可以開啟檔案了:

fstream file1("c:");
2.copy函式用法

原型copy(_init _first, _init _last,_outit _dest)

將容器中的元素從乙個區間複製到另乙個區間。_init _first, _init _last,_outit _dest 進行的是前向處理

詳細參見

stl copy()函式用法

STL迭代器技術

stl迭代器技術 c stl和各種容已提供了自己的迭代器,如輸入迭代器,輸出迭代器,前向迭代器,雙向迭代器,隨機迭代器。但是 stl在已有迭代器的基礎上,仍然定義了另外一些迭代器,以簡化某些情況下的操作。一般在 stl iterator.h 檔案中提供。1 輸入流迭代器 istream iterat...

STL總結 迭代器

所有容器都定義了各自的迭代器 迭代器是乙個物件,它的工作是在容器中挑選元素,並將其呈現給迭代器使用者。迭代器分類 input迭代器 向前讀取 istream output迭代器 向前寫入 ostream forward迭代器 向前讀取和寫入 bidirectional迭代器 向前和向後讀取和寫入 l...

STL迭代器失效

vector 1.當插入 push back 乙個元素後,end操作返回的迭代器肯定失效。此時first和end操作返回的迭代器都會失效。3.當進行刪除操作 erase,pop back 後,指向刪除點的迭代器全部失效 指向刪除點後面的元素的迭代器也將全部失效。deque迭代器的失效情況 1.在de...