3

v[i] のように要素にアクセスする前に、特定のベクトル位置 (i など) に要素が存在するかどうかを確認したかったのです。どうすればそれができるか教えていただけますか?

ありがとうございました。

4

5 に答える 5

9
if (0 <= i  &&  i < v.size()) {
  // OK
  std::cout << v[i]; // Example
} else {
  // Wrong
}
于 2009-12-14T18:54:41.403 に答える
4

要素は、ベクトルが要素の連続したシーケンスであり、「穴」が不可能であるすべての位置iに存在することが保証されています。i >= 0i < v.size()

于 2009-12-14T21:08:40.930 に答える
2

を使用しv.size()ます。

于 2009-12-14T18:55:08.093 に答える
1

ベクトルに要素が存在するかどうかを知りたい場合、最も簡単な方法は、配列を並べ替えてから、バイナリ検索などの検索方法を使用することです。

このアクションを何度も実行する場合は、データ構造を変更するとパフォーマンスが向上する可能性があります。これには std::map が適しています。コンパイラにある場合は、ハッシュ テーブルまたはマップを使用します。

それ以外の場合、ベクトルにアクセスせずに値がベクトルに存在するかどうかを判断する唯一の方法は、2 番目のデータ構造を使用して値と位置を記憶することです。

于 2009-12-14T21:01:44.960 に答える
0

std::vector特定の次元で が事前に割り当てられているとのことですが、インデックス( ) の要素が初期化されたか、割り当てられたばかりか nを確認したいと考えています。ii < n

@Thomas Matthewsが言ったように、2番目のデータ構造である単純な を使用できます。この構造では、bool[n]indexにindex の要素が存在するかどうかkを格納し、そうでない場合に格納します。truekvectorfalse

      0 1 2 3 4 5
v = [ *   *   * * ]

             0     1      2     3     4     5
exists = [ true, false, true, false, true, true ]
于 2011-04-11T16:41:12.377 に答える