0

私はこれで苦労しています。基本的に、最初に数字を読む必要があります。

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

次に、N 間隔をベクトルに読み込む必要があります。

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 デバッガーを使用すると、次のようになります。

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) 

私が間違っていることについて何か考えはありますか?ありがとうございました!

4

2 に答える 2

4

atまだ存在していないベクトルの要素に保存するために使用しています。

最も簡単な修正はpush_back、ベクトルに新しい要素を配置するために使用することです-それはそれが行うように設計されたものです。2次元があるため、2回使用する必要があります。

于 2012-04-19T20:04:08.060 に答える
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);
}
于 2012-04-19T20:04:23.080 に答える