摘抄自使用前要注意加上標頭檔案
#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...