v[i] のように要素にアクセスする前に、特定のベクトル位置 (i など) に要素が存在するかどうかを確認したかったのです。どうすればそれができるか教えていただけますか?
ありがとうございました。
if (0 <= i && i < v.size()) {
// OK
std::cout << v[i]; // Example
} else {
// Wrong
}
要素は、ベクトルが要素の連続したシーケンスであり、「穴」が不可能であるすべての位置i
に存在することが保証されています。i >= 0
i < v.size()
を使用しv.size()
ます。
ベクトルに要素が存在するかどうかを知りたい場合、最も簡単な方法は、配列を並べ替えてから、バイナリ検索などの検索方法を使用することです。
このアクションを何度も実行する場合は、データ構造を変更するとパフォーマンスが向上する可能性があります。これには std::map が適しています。コンパイラにある場合は、ハッシュ テーブルまたはマップを使用します。
それ以外の場合、ベクトルにアクセスせずに値がベクトルに存在するかどうかを判断する唯一の方法は、2 番目のデータ構造を使用して値と位置を記憶することです。
std::vector
特定の次元で が事前に割り当てられているとのことですが、インデックス( ) の要素が初期化されたか、割り当てられたばかりか n
を確認したいと考えています。i
i < n
@Thomas Matthewsが言ったように、2番目のデータ構造である単純な を使用できます。この構造では、bool[n]
indexにindex の要素が存在するかどうかk
を格納し、そうでない場合に格納します。true
k
vector
false
0 1 2 3 4 5
v = [ * * * * ]
0 1 2 3 4 5
exists = [ true, false, true, false, true, true ]