在循环中拆分一个向量,使下一个向量的大小减1,C++ [已关闭]

dtcbnfnu  于 2022-12-24  发布在  其他
关注(0)|答案(1)|浏览(100)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

昨天关门了。
Improve this question
我有一个向量a{1,2,3,4,5,6,7,8,9,10},我需要将它拆分成不同长度的向量,我可以设置向量的最大长度,向量的下一次拆分应该将向量的大小减少1
我试着解释得更好:
输入:标准::向量a{1,2,3,4,5,6,7,8,9,10},整数大小= 4
输出:标准品::矢量<std::vector >B{{1,2,3,4},{5,6,7},{8,9},{10}}
我知道如何把矢量分成两个相等的部分。

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

            return outVec;
        }

但是我需要除以这个向量,使得下一个向量的大小小于1。

yzxexxkh

yzxexxkh1#

此解决方案将满足您的要求,而且我相信它比您的解决方案更易于理解:

  • 输入:std::vector<double> a = {1,2,3,4,5,6,7,8,9,10}n = 4
std::vector<std::vector<double>> SplitVector(const std::vector<double>& vec, size_t n)
{
    std::vector<std::vector<double>> outVec;
    size_t begin, end;

    for (begin = 0; n > 0; n--) {
        end = std::min(vec.size() - begin, n);

        outVec.push_back(std::vector<double>(vec.begin() + begin, vec.begin() + begin + end));
        
        begin += end;
    }

    return outVec;
}
  • 输出:std::vector<std::vector<double>> v = {{1,2,3,4},{5,6,7},{8,9},{10}}

但是,请记住,您没有指定向量除法不完美的情况(向量a具有更多值),因此此解决方案将忽略n == 1之后的任何值。

相关问题