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

Can get_line directly fill an std::vector<std::string>?

本文关键字:std gt vector string lt 填充 get line      更新时间:2023-10-16

我想逐行读取文件,并将读取的行分派到不同的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直接填充矢量?

您可以始终使用std::movehttp://en.cppreference.com/w/cpp/utility/move

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++;
}