2011-05-03 43 views
2

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

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

请帮帮忙!

回答

5

您不初始化i。使用for (int i = 0; i<36;)。而且,在循环体的每次迭代中都会分配一个新变量forth。因此测试fourth==0将总是产生false

我希望把它推回2每个号码的4至10

我会用最直接的方法:

for (int value = 2; value <= 10; ++value) 
{ 
    for (int count = 0; count < 4; ++count) 
    { 
    vec.push_back(value); 
    } 
} 

我会做的唯一的优化在进入循环之前确保矢量的容量是足够的。我会将其他优化留给编译器。我的猜测是,你通过省略内部循环而获得的东西,你会因频繁的模块划分而失去。

+0

对不起,浪费你的时间。猜猜mah brainz在昨天没有工作。 – Gabe 2011-05-03 11:18:01

1

您没有初始化我,并且您在每次迭代中重置第四次。此外,随着你的循环条件,我不认为它会做你想要的。

我认为这应该工作:

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

我看不到这个?我想我需要一些睡眠:/ – Gabe 2011-05-03 11:18:56

0

我已经能够创建一个静态数组声明和传递数组到载体在初始化时没有问题。很干净太:


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

工程与常量,但没有与非常量数组试了一下。

+0

这是一个好主意。 – Gabe 2011-05-03 11:19:34