std :: vectorポインタ

私は心に1つの質問があります、もし私がSTLベクトルを持っていれば、私は

std::vector *p;

しかし、私はそれをどんな状況でも使用するかどうか決定できません。また、pでポインタされているベクトルのサイズを変更すると、この場合ポインタpに何が起こりますか?

I may sound stupid here but these questions just came in mind, and I am able to compile the thing std::vector *p in g++.

0
私はあなたがベクトルへのポインタをベクトルの要素へのポインタに混同していると信じています。これは、CとC ++がネイティブ配列を扱う方法がこの混乱を奨励するため、かなり理解できます。しかし、ベクトルへのポインタは配列へのポインタとは異なり、その要素とは何の関係もありません。
追加された 著者 Omnifarious,

2 答え

と言って:

std::vector *p;

Vectorへのポインタを宣言しています。これで、個々の要素ではなく、Vectorオブジェクトのメモリ内容を保持するメモリ位置を割り当てる必要があります。その後、希望に応じて個々の要素を追加、削除、削除、更新することができます。

ベクトルのサイズ変更に関しては、メモリpが参照しているものは何も起こらず、Vectorオブジェクトに関連するメモリの内容だけが変更されます。

そのような構造の1つの用途は、ベクトルの動的配列を有することである。ノードの隣接リストを維持する必要があるとしますが、ランタイムまでに、ノードがいくつになるかは事前には分かりません。

3
追加された
私はベクトルの動的配列の代わりに、単にベクトルのベクトルを使うことができると言っています。現代のC ++(スマートポインタを考える)では、このようにベクトルを宣言する理由はほとんどありません(実際は、私は考えることができません)。
追加された 著者 Björn Pollex,
@Shamim、私はベクトルのサイズを変更する場合、私のポインタpはまだ有効であると仮定しています(内部メモリの場所もベクトルのサイズ変更操作中に変更されます)?
追加された 著者 Ruchi,
@ルチ:はい、ポインタはまだ有効です。
追加された 著者 Shamim Hafiz,
@BjörnPollex:はい、私はあなたに同意します。ベクトルのベクトルは、ポインタを持つ必要性を排除します。したがって、この方法でポインタを使用することは過度のことになります。
追加された 著者 Shamim Hafiz,

実行時に複数のベクトルから1つの特定のベクトルを選択したい場合は、ベクトルへのポインタを使用できます。 e。あなたはそれを動的に選びたいと思う。

「サイズ変更」に関する質問:ベクトルポインタはサイズ変更()の影響を受けていますか?という状態ですベクトルが存在する限り、ベクトル自体へのポインタは有効です。しかし、ベクトルの要素へのポインタは変更される可能性があります。例えば:

std::vector v;
std::vector *p;
p = &v;//Does not change

int *pe;
pe = &v[0];//May change
0
追加された