2012-04-19 5 views
0

나는 이것으로 열심히 노력하고있다. 기본적으로, 내가 먼저 숫자를 읽을 수 있습니다벡터에 숫자 읽기

int n; 
scanf("%d", &n); 

가 그럼 난 벡터로 N 간격을 읽을 수 있습니다

3 
1 4 
terminate called after throwing an instance of 'std::out_of_range' 
    what(): vector::_M_range_check 

Program received signal SIGABRT, Aborted. 
0x00007ffff7260c35 in raise() from /lib/libc.so.6 
(gdb) 

:

vector< vector<int> > intervals; 
int a, b; 
for (int i = 0; i < n; i++) { 
    scanf("%d %d", &a, &b); 
    intervals.at(i).at(0) = a; 
    intervals.at(i).at(1) = b; 
} 

GDB 디버거를 사용하여, 나는이를 얻을 수 내가 뭘 잘못하고 있는지 알 겠어? 고맙습니다!

답변

2
intervals.at(i).at(0) = a; 

처음에는 벡터가 비어 있기 때문에 잘못되었습니다. push_back을 사용하거나 벡터를 미리 할당 할 수 있습니다.

push_back에 더 이상의 재 할당이 필요없는 것이기 때문에 내가 벡터를 미리 할당 할

:

vector< vector<int> > intervals(n); 
int a, b; 
for (int i = 0; i < n; i++) { 
    scanf("%d %d", &a, &b); 
    intervals.at(i).push_back(a); 
    intervals.at(i).push_back(b); 
} 
4

아직 존재하지 않는 벡터 요소에 저장하려면 at을 사용하고 있습니다.

가장 쉬운 방법은 push_back을 사용하여 새로운 요소를 벡터에 적용하는 것입니다. 두 가지 차원이 있으므로 두 번 사용해야합니다.