2011-03-24 87 views
2

讓我們說我有一個C++傳遞一個矢量<矢量<STRUCT>>用於修改

vector<vector<foobar> > vector2D(3); 
for(int i=0;i<3;i++) 
    vector2D[i].resize(3); 

所以,總共含有型foobar的的9種元素的3×3向量。

我知道要將「vector2D」傳遞給函數以修改「vector2D」中的某些值。 例如,如果foobar的包含

struct foobar{ 
     int *someArray; 
     bool someBool; 
} 

我想「的Vector2D」傳遞給修改的Vector2D這樣的功能:

vector2D[0][0].someArray = new int[100]; 
vector2D[0][0].someArray[49] = 1; 

函數不應該返回任何東西(通過引用調用)。

這甚至可能嗎?

+1

FYI:您可以在不環路初始化向量:'矢量<矢量>的Vector2D( 3,vector (3));' – 2011-03-24 00:58:44

+0

謝謝,在我的正常用例中,vector在運行時被初始化,所以我需要循環。 – clasnes 2011-03-24 01:01:17

回答

7

是的,這是可能的。您只需將其作爲非const引用傳入即可。喜歡的東西:

void ModifyVector(vector< vector<foobar> > & v) 
{ 
    v[0][0].someArray = new int[100]; 
    v[0][0].someArray[49] = 1; 
} 

vector<vector<foobar> > vector2D(3); 
ModifyVector(vector2D); 

一進一步指出:你應該,如果你在載體中使用它實現的拷貝構造函數爲你foobar結構。

+0

就是這樣。非常感謝! – clasnes 2011-03-24 01:02:10

0

當然,只是通過引用傳遞您的Vector2D:

void foo(vector<vector<foobar> >& v) 
{ 
    v[0].resize(3); 
    v[0][0].someArray = new int[100]; 
    v[0][0].someArray[49] = 1 
} 

,並稱呼其爲:

vector<vector<foobar> > vector2D(3); 
foo(vector2D); 
相關問題