我有一个问题,我想要合并大量图像使用ImageMagick的convert.exe,但在Windows下,我有一个8192字节长的命令行限制。
我对此的解决方案是将任务拆分为较小的子任务,运行它们,并完成将它们组合在一起的最终任务。
我的想法是写一个函数,它接受图像和整数的向量,然后把向量分解成n个子向量,所有子向量都有“几乎相等”的部分。
例如,如果我想把11分成3组,它是4-4-3组。
你能告诉我在C++怎么做吗?我是说,写一个函数
split_vec( const vector<image> &images, int split )分裂是哪一种?
另外,如果我不需要创建新的向量,只需遍历子部分,那么您能告诉我做最有效的方法是什么吗?就像std::substr函数和std::string一样
注意:我已经在这个项目中使用了Boost,所以如果在Boost中有一些很好的工具,那么它非常适合我。
发布于 2011-07-28 15:03:54
要得到每个零件大小的基数,只需将总数除以零件数: 11/3 = 3。很明显,有些零件需要比这个更大才能得到适当的总数,但这只是剩余的: 11 % 3 = 2。所以现在你知道其中两个部件的大小是3+1,剩下的部分是3。
发布于 2016-06-08 16:53:09
这是我的解决方案:
template<typename T>
std::vector<std::vector<T>> SplitVector(const std::vector<T>& vec, size_t n)
{
std::vector<std::vector<T>> outVec;
size_t length = vec.size() / n;
size_t remain = vec.size() % n;
size_t begin = 0;
size_t end = 0;
for (size_t i = 0; i < std::min(n, vec.size()); ++i)
{
end += (remain > 0) ? (length + !!(remain--)) : length;
outVec.push_back(std::vector<T>(vec.begin() + begin, vec.begin() + end));
begin = end;
}
return outVec;
}发布于 2011-07-28 15:04:43
CreateProcess有一个32 has的限制
或者,如果你想通过贝壳,
vec::const_iterator i = vec .begin ();
vec::const_iterator j = i + stride;
while (j < vec .end ()) {
do_range (i, j);
i = j;
j += stride;
}
do_range (i, vec .end ());https://stackoverflow.com/questions/6861089
复制相似问题