能否直接使用get_line填充std :: vector <std :: string>?

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

1
我认为.push_back(std::move(line));会窃取内部字符缓冲区,而不是产生另一个分配。 - BoBTFish
看来你想得对,谢谢。 :-) - matovitch
2个回答

3

我的老师总说stl的缺点是你必须将数据复制到容器中...看来他并不完全正确。谢谢。 - matovitch
2
他曾经是直到2011年11月。这是新的(有点)。 - BoBTFish
2
十一月?我在说什么鬼?它是在八月获批并在九月发布的 - BoBTFish

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

我也考虑过推送一个空字符串。 - matovitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接