3

ファイルを 1 行ずつ読み取り、読み取った行を個別の std::vector(s) にディスパッチして、これらの行を並行して処理できるようにしたいと考えています。このようなもの(コード化されていません)

int nb_threads = 4;
std::vector my_vectors[nb_threads];
int count_lines = 0;
std::string line;
while (getline(my_stream, line)) {
    my_vectors[count_lines % nb_threads].push_back(line);   
    count_lines++
}

ベクトルを直接埋めるためにlineへのコピーを避ける方法はありますか?my_vectors[.]getline

4

2 に答える 2

3

いつでもstd::move http://en.cppreference.com/w/cpp/utility/moveを使用できます

于 2013-08-21T09:19:10.527 に答える
2

から移動するlineことは、ここに行く方法です。C++11 より前ではpush_back、空の文字列を読み取ってから読み取ることができました。

while(true) {
    size_t i = count_lines % nb_threads;
    my_vectors[i].push_back("");   
    if (!getline(my_stream, my_vectors[i].back())) {
        my_stream[i].pop_back();
        break;
    } 
    count_lines++;
}
于 2013-08-21T09:31:41.140 に答える