C将向量拆分为n向量的最佳方法

新手上路,请多包涵

我在这个向量中有一个 std::vector<std::string>push_back 来自 txt 文件的字符串,如下所示:

 std::string line;
std::vector<std::string> path;
while(getline(fichier, line))
{
   path.push_back(line);
}

例如,我想将路径 vector 拆分为其他 vector 的 10 行。因此,如果我的 vector 的大小为 25,我想要 2 个其他 10 个元素的向量和一个 vector 5 个元素。

最好的方法是什么?

原文由 simon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 425
1 个回答

最好是见仁见智,但您可以执行以下操作(使用 bunch_size10 ):

 for(size_t i = 0; i < strings.size(); i += bunch_size) {
    auto last = std::min(strings.size(), i + bunch_size);
    bunches.emplace_back(strings.begin() + i, strings.begin() + last);
}

演示

如果您的字符串很大并且您想避免复制,则可以使用移动版本:

 for(size_t i = 0; i < strings.size(); i += bunch_size) {
    auto last = std::min(strings.size(), i + bunch_size);
    auto index = i / bunch_size;
    auto& vec = bunches[index];
    vec.reserve(last - i);
    move(strings.begin() + i, strings.begin() + last, back_inserter(vec));
}

演示

原文由 krzaq 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题