2011-03-24 4 views
2

을 수정하기위한 벡터 <벡터 >를 전달 나는 그래서 C는 ++의 말을하자

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

이 총에 입력는 foobar의 9 개 요소를 포함하는 3 × 3 벡터.

"vector2D"의 일부 값을 수정하는 함수에 "vector2D"를 전달하고 싶습니다.

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

기능은 아무것도 (참조에 의한 호출)을 반환하지 않아야 예를 들어, 경우는 foobar는이 같은 vector2D을 수정하는 기능을 "vector2D"를 전달하려는

struct foobar{ 
     int *someArray; 
     bool someBool; 
} 

가 포함되어 있습니다.

이것도 가능합니까?

+1

'벡터 <벡터 > vector2D (3, 벡터 (3)), ' –

+0

덕분에, 내 정상적인 유스 케이스에서 벡터는 런타임 중에 초기화되므로 루프가 필요합니다. – clasnes

답변

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

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);