terminate called after throwing an instance of 'std::out_of_range'

前端 未结 2 2027
傲寒
傲寒 2021-02-10 05:08

Why does this happen my program says that it has no errors but then when I run it I get terminate called after throwing an instance of \'std::out_of_range\' what(): vector:_M_ra

相关标签:
2条回答
  • 2021-02-10 05:46

    You access elements in deck here:

    num1 = deck.at(pos1);
    num2 = deck.at(pos2);
    

    but it is empty. You have to fill it at some point before making those calls. You can check if a vector is empty with the std::vector::empty method, and get it's size with std::vector::size. See this std::vector reference for more information on those two methods.

    0 讨论(0)
  • 2021-02-10 05:54

    It looks to me as if this is due to a typo, and you should use the variable 'j' in the second loop. After the first loop,

    for (i = 0; i < 52; i++)
    {
        nums.push_back(i);
    }
    

    the variable 'i' contains the value 52, so it sounds expected that calling nums.at(i) would throw a std::out_of_range, since nums only contains 52 values, starting at index 0.

    for(int j = 0; j < 52; j++)
    {
        cout << nums.at(i) << "\n";
    }
    

    Fix it by replacing the argument of at() with 'j', which I assume was the original intent:

    for(int j = 0; j < 52; j++)
    {
        cout << nums.at(j) << "\n";
    }
    
    0 讨论(0)
提交回复
热议问题