我只是搞亂了一些流和迭代器,並且一切都很好,直到我嘗試下面的代碼。我期待輸出是從輸入文件逐行打印的所有單詞。我知道我可以在ifstream上使用>>操作符,但我只是編寫這些代碼以更好地掌握流和迭代器。我得到的當前輸出是自己行上打印的第一行的所有單詞。C++流和迭代器:爲什麼只打印一次?
#include <iostream>
#include <sstream>
#include <fstream>
#include <algorithm>
#include <iterator>
int main (int argc, char* argv[]) {
if (argc < 3) {
std::cerr << "Usage: " << argv[0] << " INPUT_FILE OUTPUT_FILE" << std::endl;
}
std::string line;
std::istringstream iss;
std::ifstream ifs;
ifs.open(argv[1]);
while (getline(ifs, line)) {
iss.str(line);
std::cout << iss.str(); //debug
std::copy(std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(std::cout, "\n"));
}
ifs.close();
return 0;
}
在循環中定義並構造'iss'。 –
@JamesKanze:爲什麼這會更好? –
因爲它可以確保'iss'具有乾淨的狀態。如何清除所有可能的狀態並不明顯。 –