2011-08-22 88 views
4

我遇到了一個很酷的STL示例,它使用istream_iterators從標準輸入(cin)複製到矢量。如何使用std :: copy直接從文件流中讀取到容器?

vector<string> col1; 
copy(istream_iterator<string>(cin), istream_iterator<string>(), 
    back_inserter(col)); 

我該如何做一些類似的操作,直接從文件流中讀取到容器中?我們只是簡單的說一下它的內容:

「快速的棕色狐狸跳過了懶狗。」

我希望每個單詞都是複製行之後的矢量中的單獨元素。

+2

提示:'的std :: cin'是一個文件流。 –

+0

正是以同樣的方式。 –

+0

@BoPersson:'std :: cin'不是'std :: fstream',所以你的評論是不明確的。 –

回答

11

成功打開該文件後,更換cin與文件流對象:

ifstream file("file.txt"); 

copy(istream_iterator<string>(file), istream_iterator<string>(), 
               back_inserter(col)); 

事實上,你可以替換cin與任何C++標準輸入流。

std::stringstream ss("The quick brown fox jumped over the lazy dogs."); 

copy(istream_iterator<string>(ss), istream_iterator<string>(), 
               back_inserter(col)); 

想到了嗎? col將包含您傳遞給std::stringstream的字符串的單詞。

6

與fstream實例而不是cin完全相同。

2

我不認爲複製函數是必需的,因爲vector有一個以begin和end結構作爲迭代器的構造函數。

因此,我認爲這是對你OK:

ifstream file("file.txt"); 
vector<string> col((istream_iterator<string>(file)), istream_iterator<string>()); 

冗餘()是清除Most_vexing_parse

相關問題