以cin為引數的istream_iterator流迭代器int物件在輸入的時候,如何結束?
1樓:陳宗權
你可以用結束符ctrl+d來表示結束。
#include
#include
using namespace std;
int main()
istream_iteratorii(cin);
int data;
while(true){
data = ii;//取得叢辯好輸入的資料。
if(!cin) break;//如果失敗(ctrl+d,或者非數字字元)就結束。
cout <+ii;cout 你也灶型可以指定乙個表示滲鉛結束的值,這樣就可以通過它來判斷結束了。
2樓:匿名使用者
可以用結束符ctrl+d來表示。祥老空編譯程式如下:
#include
#include
using namespace std;
int main()
istream_iterator《謹瞎int> ii(cin);
int data;
while(true){
data = ii;//取得輸入的資料。
if(!cin) break;//如果失敗(ctrl+d,或者非數字字元)就結束。
cout <+ii;cout 你也可以指定乙個表示結束的值,這樣就可以含檔通過它來判斷結束了。
c++ stl中,istream_iterator
3樓:魔石
eof=end of file的縮寫,istream_iteratoreof定義了乙個輸入流迭代器eof,其指向輸入資料的最後位置+1,即指示的為null位置,此時,判斷條件while(pit !=eof)為true(即兩個迭代器指向位置不同)則 迴圈進行,當遍歷完資料之後,迭代器超出,此時迭代器pit剛好指向eof指向的位置,二者只想相同,判斷結果為false,結束迴圈。
4樓:小兆
沒有顯示初始化就是使用預設的初始化,你可以認為這裡是null,但是可能不同的實現是不一樣的,比如檔案的結束是 -1。
迭代器++執行下乙個資料,迭代器的最後有個所謂的空資料。在這裡跟字串最後的null很類似的。
istream_iterator 工作流程
5樓:網友
istream_iterator是標準庫為我們提供的再iostream物件上使用的迭代器,用於讀取輸入流。它是類模版,istream_iteratorone(cin)這樣的語句建立乙個istream_iterator迭代器物件one,並使用標準輸入流cin來初始化它,用於從cin中讀取int型的資料。那麼下面幾點:
1. istream_iteratoreof是乙個eof迭代器,並不是我們常說的eof。它沒有任何標準輸入流來初始化,所以是乙個空的迭代器。用於表示讀到結束。
2. 怎樣結束one迭代器的讀取?當遇到檔案結束(如輸入ctrl+z)或者非int型值(發生讀取錯誤了)就會結束。
所以你可以在執行時直接輸入 1 2 3 4 ctrl+z (回車)來看看執行效果或者1 2 3 s(回車)。
它們都是結束了輸入流,因為ctrl+z標誌結束,s是乙個非int型值。
3. 由於程式使用cin來初始化輸入迭代器one,所以開始先等待你的輸入,並讀取到緩衝區。當你按下回車,系統以為你的輸入結束(可能包含結束標誌的輸入),往下執行。
所以才執行cout語句。
4. 為什麼輸入1 2 3 4 5 6(回車)輸出只到5呢?因為temp=(*one++)這條語句的原因。
當one迭代器指向5的時候,temp=5,然後one迭代器指向6,輸出了5,再迴圈時,temp = 6,one++使得one指向6後面的迭代器,而你的輸入6後面沒有下乙個合法位置,所以程式就在這裡等待了,不執行cout《輸入乙個比如s,one指向的位置不合法,其值等於乙個空物件即eof,所以結束輸入。
說了這麼多,希望對你有幫助。
c++標準輸入輸出流迭代器
6樓:金毛獅王
幫你修改正常了,你的++操作符在被編譯器解析時不是你想像的順序,迭代器移動式b總比a慢一拍。你好好看一下++和*的優先順序就明白了。++高於*。
另外,表示式是從右向左解析的。
首先,istream_iteratora(cin);時要求一次輸入,例如輸入了5.
然後,*b++=a++;執行時,先要求a進行一次輸入,例如輸入了4;然後b被要求輸出,此時輸出的是第一次輸入a的5,再加上delim 『b』。
#include
#include
#include
using namespace std;
int main()
istream_iteratora(cin);
ostream_iteratorb(cout,"b");
while(*a!=eof)
b=*a;b++;a++;
7樓:網友
站位等答案。
我想應該是iterator的機制問題。
stl中的istream_iterator
8樓:_鈊_煩_薏亂
copy是乙個泛型演算法,大體意思是把後面的東西拷貝到輸入流中,看看這個例程:
stl演示程式版本:輸入--排序--輸出,stl完美演繹#include
#include //用於人機介面互動。
#include //為了使用vector容器#include //為了使用sort演算法#include //為了使用輸入輸出迭代器using namespace std;
int main(void)
c++,對自定義的型別用istream_iterator出錯!
9樓:網友
std::ostream& operator<<(std::ostream& out,const node& n)
輸出的型別要改成 const node &。基本上就是儘量用const, 因為stl裡面用了很多,你不用就接不到一起去。
c++流迭代器如何轉換繫結物件
10樓:匿名使用者
直接複製構造廳兆臘就行了,不過只能從同模板引數型別構造:
#include
#include
using namespace std;
int main()
ostream_iterator猜敗 oi(cout);
oi = 123;
oi = 456;
oi = ostream_iterator(cout, "流你可以再這裡改扮滑。
oi = 333;
oi = 444;
11樓:匿名使用者
不同型別的你就別隻定義乙個了。如果兩個是同型別的。解綁直接用另外乙個賦值過來就ok了。
c++輸入流可以用流迭代器排序嗎
12樓:網友
最基本的,排序就要修改元素,輸入流能修改嗎。
此外輸入流還有些東西不滿足,所以很多演算法都不能直接應用於流迭代器。
先把輸入的內容放到乙個容器中,就能對容器排序了。
13樓:打響_第一炮
我看的書說sort()需要隨機訪問迭代器,而輸入流只是輸入迭代器。
c++乙個疑問,請看載圖
14樓:物理公司的
主要原因是因為沒理解流迭代器。
iostream迭代器的建構函式:
istream_iteratorin(cin);
建立從輸入流cin讀取t型別物件的istream_iterator物件。
istream_iteratorin;
istream_iterator物件的超出末端迭代器。
他的初始化方式就說明了他是末端迭代器。
上面這個例子。
istream_iteratorin_iter(cin);
istream_iteratoreof;
vectorvec(in_iter,eof);
這裡用一對標記元素範圍的迭代器構造vec物件。這些迭代器是istream_iterator物件。這就意味著這段範圍的元素是通過讀取所關聯的流來獲得的。
這個建構函式效果是讀cin,直到到達檔案結束或輸入的不是int型數值為止。
名字是自己定義的。
15樓:萢萢
你的圖中的這個是自定義的,不是系統定義的。
你說的系統定義的eof,是大寫的。
16樓:
eof確實不是自己定義的啊,end of file讀取檔案時表示讀到檔案結尾。
以快樂為話題的作文,以快樂為話題的作文
原凌晴 快樂是什麼?快樂是每一位母親忙碌的身影。母親 是世界上最偉大的名詞,她們為了孩子默默地辛勞,不知勞苦,母親的腦海中永遠只記得 孩子快樂了,我就快樂。正如葉傾城筆下 走在每一位母親的情懷裡 裡的每一位不知姓名的母親,為了孩子們的春遊而排隊買麵包,手中還拎著大袋孩子們的零食,卻又不敢擱放在一旁,...
以憐憫為題的作文,以憐憫為題的作文
蘿莉御姐反 在 兒童文學 上看過這樣一篇故事 一天,乙個兩歲多的小女孩和她的家人一起在看一部 熊 的法國記錄片。但是的螢幕上,乙隻熊媽媽和乙隻熊寶寶早森林裡找食物。熊媽媽用乙隻手護住頭,乙隻手去挑枝幹間的蜂窩。這時,突然從山上滾下一快巨石,把熊媽媽壓住了。小熊不知道熊媽媽是不能起來的,所以,即使小熊...
以窗外為話題的作文,以窗外為話題的作文
剎那永恆 窗外的世界 扇動著纖弱的羽翼,沐浴著昔日的陽光,抖去夏天的不安,披上金黃的目光。彼岸,依舊是和著寒風的故土,在瀰漫著淡淡的清香。一種熟悉的聲音在呼喚著,一種溫柔的語言在夢魂縈繞,一種沉重的諾言在渺茫的心靈曠野上 落定塵埃。多少著風雨之夜,我捫心自問著不爭氣的我,竟然沒有發現窗外的世界是如此...