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を使用して、新しい要素をベクターに入れることです。これはそのために設計されたものです。 2つのディメンションがあるので、2回使用する必要があります。

関連する問題