どうでもいいC++コード断片
簡易catコマンド
streambuf_iterator と std::copy を組み合わせる。
#include <iostream> #include <fstream> #include <iterator> #include <algorithm> #include <cerrno> #include <cstring> int main(int argc, char** argv) { using namespace std; if (argc == 1) { copy(istreambuf_iterator<char>(cin), istreambuf_iterator<char>(), ostreambuf_iterator<char>(cout)); } else { for (int i = 1; i < argc; i++) { ifstream in(argv[i]); if (!in) { cerr << argv[i] << ": " << strerror(errno) << endl; } else { copy(istreambuf_iterator<char>(in), istreambuf_iterator<char>(), ostreambuf_iterator<char>(cout)); } } } return 0; }
ファイルの内容を std::string に読み込む
std::string のコンストラクタに iterator を渡す。
std::ifstream in(filename); if (!in) { // error handling } std::string content(std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>());
結論
STL 知らなきゃさっぱりわからなくね?