c++ - 如何将 vector 拆分为 n 个 "almost equal"部分

标签 c++ visual-studio-2010 boost vector iterator

我有一个问题,我想使用 ImageMagick 的 convert.exe 合并大量图像,但在 Windows 下我有 8192 字节长的命令行限制。

我对此的解决方案是将任务拆分为较小的子任务,运行它们,然后执行将它们组合在一起的最终任务。

我的想法是编写一个函数,它接受一个图像 vector 和一个整数,并将 vector 拆分为 n 个子 vector ,所有子 vector 都具有“几乎相等”的部分。

例如,如果我想将 11 人分成 3 组,那就是 4-4-3。

你能告诉我如何在 C++ 中做到这一点吗?我的意思是,写一个函数

split_vec( const vector<image> &images, int split )

哪个 split ?

另外,你能告诉我如果我不需要创建新 vector ,只需遍历子部分,最有效的方法是什么吗?像 std::substr 函数和 std::string?

注意:我已经在项目中使用了 Boost,所以如果 Boost 中有一些不错的工具,那么它对我来说是完美的。

最佳答案

要获得每个部分大小的基数,只需将总和除以部分数:11/3 = 3。显然,某些部分需要大于该值才能获得正确的总和,但是这只是余数:11 % 3 = 2。所以现在您知道其中 2 个部分的尺寸为 3+1,剩下的部分将是 3。

关于c++ - 如何将 vector 拆分为 n 个 "almost equal"部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6861089/

相关文章:

c++ - 按参数类型专门化重载构造函数 C++

c++ - 语句包含自身

visual-studio-2010 - 如何永久停止 Visual Studio 的增量构建?

c++ - 将包含 2d 指针的结构复制到设备

c++ - 通过引用传递错误:const boost::system::error_code error

c++ - 使用 GCC 编译 boost::multi_index 和 std::shared_ptr

c++ - 当 std::vector 重新分配其内存数组时,使用的是复制构造函数还是移动构造函数?

c++ - 暂停执行直到收到套接字上的特定消息?

c# - 使用预处理器指令 #if 在 Visual Studio 中调试 WindowsService

c++ - 我还需要对 algorithm::join 使用 boost 吗?