2016-09-16 72 views
1

用C++ 11,I最初有以下形式的与默认值的2D矢量:C++实例化2D矢量内部结构具有默认值

vector<vector<int>> upper({{1,2,3,4,5,6},{7,8,9,10,11,-1},{12,13,14,15,-1,-1},{16,17,18,-1,-1,-1},{19,20,-1,-1,-1,-1},{21,-1,-1,-1,-1,-1}}); 
vector<vector<int>> lower({{0,0,0,0,0,0},{0,0,0,0,0,-1},{0,0,0,0,-1,-1},{0,0,0,-1,-1,-1},{0,0,-1,-1,-1,-1},{0,-1,-1,-1,-1,-1}}); 

这代表一个难题的上部和下部部件予正在努力解决。现在我想修改我的程序,以便这些向量在struct中声明,但我不知道如何执行此操作并给出2d向量的默认值。这是我的时刻:

struct BoardState{ 
vector<int> row; 
vector<vector<int>> upper; 
vector<vector<int>> lower; 

BoardState() : row(6,0), upper(6,row), lower(6,row) {}; 
}; 

但它会导致赛格故障时,我尝试访问里面的内容,使用:

#include <iostream> 
#include <vector> 
#include <stdlib.h> 

BoardState *board; 
int main(){ 
      using namespace std; 
      ... 
      for(int i=0; i<6; i++){ 
       for(int j=0; j<6; j++){ 
        cout << board->upper[i][j] << " "; 
       } 
       cout << endl; 
      } 

} 

如何给默认值内的2D矢量一个结构?谢谢。

+0

[gcc warning''将会在']之后被初始化(http://stackoverflow.com/questions/1564937/gcc-warning-will-be-initialized-after) – ArchbishopOfBanterbury

回答

0

我不知道如何做到这一点,并给了2D向量默认值。

究竟与该结构

#include <vector> 
#include <iostream> 

struct BoardState 
{ 
    std::vector<std::vector<int>> upper{{1,2,3,4,5,6},{7,8,9,10,11,-1}, 
             {12,13,14,15,-1,-1},{16,17,18,-1,-1,-1}, 
             {19,20,-1,-1,-1,-1},{21,-1,-1,-1,-1,-1}}; 
    std::vector<std::vector<int>> lower{{0,0,0,0,0,0},{0,0,0,0,0,-1}, 
             {0,0,0,0,-1,-1},{0,0,0,-1,-1,-1}, 
             {0,0,-1,-1,-1,-1},{0,-1,-1,-1,-1,-1}}; 
    std::vector<int> row; 

    BoardState() 
    { } 
}; 

int main() 
{ 
    BoardState bs; 

    std::cout << bs.upper[3][1] << std::endl; // print 17 
} 

struct BoardState 
{ 
    std::vector<int> row {6, 0}; 
    std::vector<std::vector<int>> upper {6, row}; 
    std::vector<std::vector<int>> lower {6, row}; 

    BoardState() 
    { } 
}; 

(在这种情况下,打印0)的外部。

根据ArchbishopOfBanterbury和Petter的说明,成员按声明顺序进行初始化;所以,如果您想要使用row初始化upperlower,则必须先声明row

1

gcc warning" 'will be initialized after'

确保成员出现在初始化列表以相同的顺序 因为它们出现在课堂上。

编辑:

#include <iostream> 
#include <vector> 
using namespace std; 

struct BoardState{ 
vector<int> row; 
vector<vector<int>> upper; 
vector<vector<int>> lower; 
BoardState() : row(6,0), upper(6,row), lower(6,row) {}; 
}; 

int main() { 
    BoardState board; 
    for(int i=0; i<6; i++){ 
     for(int j=0; j<6; j++){ 
      cout << board.upper[i][j] << " "; 
     } 
     cout << endl; 
    } 
} 
+0

谢谢。我已经解决了这个问题但我仍然遇到seg故障 – MetalMagnum

+0

尝试在我的编辑中的代码 - 它的工作原理。 – Petter