gpt4 book ai didi

c++ - 在抛出 'std::out_of_range' 实例后调用终止

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:38 26 4
gpt4 key购买 nike

为什么会发生这种情况我的程序说它没有错误但是当我运行它时我在抛出'std::out_of_range'what(): vector:_M_range_check 实例后被调用终止。我是 c++ 的新手,所以我不明白这些错误

#include <vector>
#include <iostream>
#include <random>
#include <time.h>

using namespace std;
using std::vector;

int main()
{

vector<int> deck;
vector<int> nums;
default_random_engine eng(time(0));
uniform_int_distribution<int> dis(0, 51);

int pos1;
int pos2;
int num1;
int num2;
int i;
int n;
int m;

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

}

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


for(n = 0; n < 50; n++)
{
pos1 = dis(eng);
pos2 = dis(eng);

cout << pos1 << "\n" << pos2 << "\n";

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

}

}

最佳答案

在我看来,这是由于打字错误造成的,您应该在第二个循环中使用变量“j”。在第一个循环之后,

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

变量“i”包含值 52,因此听起来预期调用 nums.at(i) 会抛出 std::out_of_range,因为 nums 仅包含 52 个值,从索引 0 开始。

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

通过将 at() 的参数替换为“j”来修复它,我认为这是原始意图:

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

关于c++ - 在抛出 'std::out_of_range' 实例后调用终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19217093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com