どうでもいい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 知らなきゃさっぱりわからなくね?