2011-05-03 40 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