2010-04-28 53 views
5

我試圖做這樣的事情:如何在C++中聲明和初始化一個2d int向量?

#include <iostream> 
#include <vector> 
#include <ctime> 

class Clickomania 
{ 
    public: 
     Clickomania(); 
     std::vector<std::vector<int> > board; 
}; 

Clickomania::Clickomania() 
    : board(12, std::vector<int>(8,0))    <<<<<<< 
{ 

    srand((unsigned)time(0)); 

    for(int i = 0; i < 12; i++) 
    { 
     for(int j = 0; j < 8; j++) 
     { 
      int color = (rand() % 6) + 1; 
      board[i][j] = color; 
     } 
    } 
} 

不過,顯然我不能初始化向量的「板」矢量這種方式。

如何創建一個2D矢量類型的公共成員並正確初始化它?

+3

爲什麼你不能這樣初始化它? (除了你應該在別處調用'srand'而不是每次創建一個板子的事實)。 – 2010-04-28 23:33:06

+1

它在Visual Studio 2005中編譯得很好。究竟是什麼編譯器錯誤? – 2010-04-28 23:34:13

+0

編譯看起來很好。儘管如此,你應該在其他地方調用'srand',並提供參數而不是「幻數」12,8,0,6等等。 – 2010-04-28 23:37:42

回答

3

用g ++編譯你的代碼,我得到的錯誤是srand()rand()都沒有聲明。我不得不添加#include <cstdlib>來編譯代碼。但一旦我做到了,它就很好。所以,我會說,除了添加包含語句之外,您的代碼很好。你正在初始化矢量。

也許你的代碼與你發佈的內容不太一致?我會假設如果你的實際代碼不包含cstdlib,你很快就會明白這是問題而不是向量。所以,如果你的代碼與你發佈的內容不太匹配,那可能就是這個問題。如果不是,你使用的是什麼編譯器?

5

使用基質代替:

(從升壓文檔Basic示例)

#include <boost/numeric/ublas/matrix.hpp> 
#include <boost/numeric/ublas/io.hpp> 

int main() { 
    using namespace boost::numeric::ublas; 
    matrix<double> m (3, 3); 
    for (unsigned i = 0; i < m.size1(); ++ i) 
     for (unsigned j = 0; j < m.size2(); ++ j) 
      m (i, j) = 3 * i + j; 
    std::cout << m << std::endl; 
} 
+0

爲什麼downvote這個? – 2010-04-28 23:53:03

+3

也許是因爲它與獲取向量在上面的代碼中工作無關,就像所問的問題一樣。我不知道。我認爲降低這一點有點苛刻 - 這個答案*畢竟可能有用 - 但它在技術上並不能解決問題。 – 2010-04-29 00:07:06

+3

+1,即使它沒有完全回答OP的問題,我也沒有發現需要投票回答有用的答案。 – 2010-04-29 01:18:08

11

你應該使用,使您可以爲這兩個向量指定大小和初始值的構造可以使它有點完全更容易。

類似:

vector<vector<int>> v2DVector(3, vector<int>(2,0)); 

應該工作。

+5

這正是OP所做的。 – 2010-04-28 23:42:44

+0

是的,只是注意到..不知道我是如何錯過它的。 – sanimalp 2010-04-28 23:46:15