get_line可以直接填充std :: vector <std :: string>?</std :: string>

时间:2013-08-21 09:14:35

标签: c++ vector copy

我想逐行读取文件并将读取行分派给不同的std :: vector,以便我可以并行处理这些行。像这样的东西(甚至没有编码)

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直接填充向量?

2 个答案:

答案 0 :(得分:3)

您可以随时使用std::move http://en.cppreference.com/w/cpp/utility/move

答案 1 :(得分: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++;
}