为什么我得到 'std::length_error' what(): vector::_M_default_append?

问题描述 投票:0回答:0

具有以下功能,可在不改变元素总和的情况下将十进制向量四舍五入为 int:

Eigen::VectorXi PSOOCBAA::smart_rounding(Eigen::VectorXd v, int desired_sum) {
        Eigen::VectorXd margin (v.size());
        Eigen::VectorXi rounded (v.size());

        for (int i = 0; i < v.size() ; i++) {
                rounded(i) = std::floor(v(i));
                margin(i) = v(i) - rounded(i);
        }

        std::vector<int> indices = sort_indices(margin);
        std::reverse(indices.begin(), indices.end());
        indices.resize(desired_sum - rounded.sum());

        for(int index : indices)
                rounded(index) += 1;

        return rounded;
}

输入 v 取决于随机数,在极少数情况下,我们会得到以下错误:

在抛出“std::length_error”的实例后调用终止 什么():向量::_M_default_append

在我们的例子中,向量 v 的最大长度是 20,所以 max size 应该没有问题。你们有什么想法吗?

我们已经确保输入正确并且不包含任何

nan
s。我们还添加了所需的总和作为输入,以确保它也是正确的。

c++ eigen stdvector
© www.soinside.com 2019 - 2024. All rights reserved.