2017-01-05 4 views
-2

벡터에 int 벡터를 저장하고 싶습니다. 먼저 벡터 타입 벡터를 초기화 한 다음 반복을 시작하고 int 숫자를 0에서 4까지 각 subvectoer에 저장합니다. 아래 코드 : 그래서벡터를 벡터에 저장하는 방법 C++

std::vector<std::vector<int> > v(12); 

void fun_1(std::vector<int> a) 
{ 
    for (int i = 0; i < 5; ++i) 
    { 
     a.push_back(i); 
    } 
} 
int main() 
{ 

    for (int i = 0; i < 12; ++i) 
    { 
     fun_1(v[i]); 
    } 

    cout<<v[0].at(2); 
} 

내가 생각하는 세그먼트 오류가 항상 존재한다는 완료 후에는 서브 벡터가 여전히 비어 있기 때문에, 그들이 할당되지 않은, 그래서 나는이 내 목표를 달성하기 위해 수정하는 방법 궁금 ? 어떤 아이디어에 감사드립니다. 그것은 단지 벡터의 로컬 복사본 아닌 원래 하나의 통과시켰다. 그래서 원래는 비어을 수정 있도록

+0

을 당신이 그랬던 것처럼. 함수 안에'cout'을 넣으십시오. – juanchopanza

+6

벡터를 참조로 함수에 전달해야합니다. –

+0

@latereveloper 감사합니다! 문제가 해결되었습니다 – MMzztx

답변

0

기능 fun_1 복사하여 입력 매개 변수를 받아들입니다. 그 (존재하지 않는) 요소 중 하나에 액세스하려고하면 예외가 발생합니다.

참조로 인수를 허용하도록 fun_1을 변경하는 경우 :

void fun_1(std::vector<int>& a) 

가 잘 작동합니다.

+0

정말 고마워요! 문제 해결 – MMzztx

0

복사하여 함수에 매개 변수를 보내, 당신은 참조하여 보내야합니다 : 당신이 만든 변경

void fun_1(std::vector<int> &a) 
{ 
    for (int i = 0; i < 5; ++i) 
    { 
     a.push_back(i); 
    } 
} 
0

당신이 반환 한 번, 그래서 당신은, fun_1의 값으로 벡터를 전달하는, 모든 ~은 폐기됩니다. fun_1이 통화 대신 V의 사본을 조작하고, 실제로 V를 조작 할 주에 fun_1하게됩니다

void fun_1(std::vector<int> &a) 
{ 
    for (int i = 0; i < 5; ++i) 
    { 
     a.push_back(i); 
    } 
} 

처럼 보일 것이다.

+0

@Morteza가 나를 때리는 것 같습니다. – Trevor

관련 문제