c++ 抛出“std::out_of_range”what()的示例后调用了terminate:vector::_M_range_check:__n(which is 0)>= this->size()(which is 0)[关闭]

rvpgvaaj  于 2023-03-25  发布在  其他
关注(0)|答案(1)|浏览(526)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
3天前关闭。
Improve this question
我在leetcode上尝试两个加两个列表。我的c++代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution
{
public:
    void insert_head(ListNode *&root, int data)
    {
        ListNode *temp = new ListNode(data);
        temp->next = root;
        root = temp;
    }
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
    {
        int i = 0, n1 = 0, n2 = 0, sum, ff;
        vector<int> a;
        vector<int> b;
        vector<int> c;

        while (l1 != NULL && l2 != NULL)
        {
            a.push_back(l1->val);
            b.push_back(l2->val);
            l1 = l1->next;
            l2 = l2->next;
        }
        // a={2,4,3}
        // b={5,6,4}
        reverse(a.begin(), a.end());
        reverse(b.begin(), b.end());
        // a={3,4,2}
        // b={4,6,5}
        while (i < a.size())
        {
            n1 = n1 * 10 + a[i];
            n2 = n2 * 10 + b[i];
            ++i;
        }
        sum = n1 + n2;
        // sum=807

        while (sum > 0)
        {
            c.push_back(sum % 10);
            sum = sum / 10;
        }
        // c={7,0,8}
        reverse(c.begin(), c.end());
        // in leet code cannot provide c[0]
        i = 0;
        ListNode *k = new ListNode(c.at(i));
        i++;
        while (i < c.size())
        {
            insert_head(k, c.at(i));
            ++i;
        }

        return k;
    }
};

但在抛出“std::out_of_range”what()的示例后,它将返回此错误终止调用:vector::_M_range_check:__n(0)〉= this-〉size()(0)

drnojrws

drnojrws1#

std::out_of_range表示你正在访问vector中不存在的值。在这种情况下,它是你试图访问的第一个值c[0],但失败了。这意味着vector c是空的。
如果你能提供一个具体的例子,说明类在抛出时是如何使用的,那么我们也许能告诉你为什么。

相关问题