向量中的push_back和for循环返回SIGABRT信号(信号6)(C++)

Gab*_*abe 2 c++ vector sigabrt

我正在制作一个C++游戏,它要求我将36个数字初始化为一个向量.您无法使用初始化列表初始化向量,因此我创建了一个while循环来更快地初始化它.我想让它将每个数字中的4个从2推回到10,所以我使用一个名为4th的int来检查循环的数量是否是4的倍数.如果是,它会改变推回的数字下一个数字.但是,当我运行它时,我得到了SIGABRT.但是,它必须是第四个问题,因为当我拿出它时,它没有给出信号.这是程序:

for (int i; i < 36;) {
    int fourth = 0;
    fourth++;
    fourth%=4;
    vec.push_back(i);
    if (fourth == 0) {
        i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

请帮忙!

Osw*_*ald 5

你没有初始化i.使用for (int i = 0; i<36;).此外,forth在循环体的每次迭代上分配新变量.因此,测试fourth==0将始终产生false.

我想让它将每个数字中的4个从2推回到10

我会用最直接的方法:

for (int value = 2; value <= 10; ++value)
{
  for (int count = 0; count < 4; ++count)
  {
    vec.push_back(value);
  }
}
Run Code Online (Sandbox Code Playgroud)

我要做的唯一优化就是确保在进入循环之前矢量的容量足够.我会将其他优化留给编译器.我的猜测是,你通过省略内循环获得的,你会因频繁的模除法而失败.