繁体   English   中英

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

[英]Vector push_back in while and for loops returns SIGABRT signal (signal 6) (C++)

我正在制作一个 C++ 游戏,它需要我将 36 个数字初始化为一个向量。 你不能用初始化列表初始化向量,所以我创建了一个 while 循环来更快地初始化它。 我想让它从 2 到 10 将每个数字的 4 推回,所以我使用一个名为第四的 int 来检查循环的数量是否是 4 的倍数。如果是,它会将推回的数字更改为下一个数字。 但是,当我运行它时,我得到了 SIGABRT。 不过,肯定是第四个有问题,因为当我把它拿出来时,它没有发出信号。 这是程序:

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

请帮忙!

您不初始化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);
  }
}

我要做的唯一优化是在进入循环之前确保向量的容量足够。 我会将其他优化留给编译器。 我的猜测是,你通过省略内部循环获得了什么,你会因为频繁的模除而失去。

您没有初始化 i,并且您在每次迭代中重置第四个。 另外,对于您的 for 循环条件,我认为它不会满足您的要求。

我认为这应该有效:

int fourth = 0;
for (int i = 2; i<=10;) {
  fourth++;
  fourth%=4;
  vec.push_back(i);
  if (fourth==0) {
     i++;
  }      
}

我已经能够创建一个 static 数组声明,并在初始化时将该数组传递到向量中而没有问题。 也很干净:


const int initialValues[36] = {0,1,2...,35};
std::vector foo(initialValues);

适用于常量,但尚未尝试使用非 const arrays。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM