How to split a vector into n “almost equal” parts

后端 未结 7 663
野性不改
野性不改 2020-12-18 20:03

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.

7条回答
  •  情书的邮戳
    2020-12-18 20:44

    Here is my solution:

    template
    std::vector> SplitVector(const std::vector& vec, size_t n)
    {
        std::vector> 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(vec.begin() + begin, vec.begin() + end));
    
            begin = end;
        }
    
        return outVec;
    }
    

提交回复
热议问题