Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to split a vector into n "almost equal" parts

I have a problem that I would like to merge a large number of images using ImageMagick's convert.exe, but under Windows I have a 8192 byte long command line limit.

My solution to this is to split the task into smaller sub-task, run them, and do a final task which combines them together.

My idea is to write a function, which takes a vector of images and an integer, and splits the vector into n sub-vector all having "almost equal" parts.

So for example if I would like to split 11 into 3 groups it would be 4-4-3.

Can you tell me how can I do it in C++? I mean, to write a function

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

which does the splitting?

Also, can you tell me what is the most efficient way to do if I don't need to create new vectors, just iterate through the sub-parts? Like the std::substr function with std::string?

Note: I already use Boost in the project, so if there is some nice tool in Boost for this then it's perfect for me.

like image 528
hyperknot Avatar asked Jul 28 '11 14:07

hyperknot


People also ask

How do I split a vector in R?

To split the vector or data frame in R, use the split() function. To recover the split vector or data frame, use the unsplit() method.


1 Answers

To get a base number for the size of each part, simply divide the total by the number of parts: 11/3 = 3. Obviously some of the parts will need to be bigger than that to get the proper total, but that's just the remainder: 11 % 3 = 2. So now you know that 2 of the parts will be size 3+1, and whatever's left over will be 3.

like image 142
Mark Ransom Avatar answered Sep 17 '22 04:09

Mark Ransom