2009-03-07 8 views
2

変数をベクターからどのように取り出すことができますか?ベクトル内の変数にアクセスするにはどうすればいいですか?<struct> * obj?

バイナリ挿入演算子または等価演算子は使用できません。

以前、私はvector<someStruct> *vObjを宣言し、それを割り当てられ、その後、vObj を返し、この機能でそれを呼ばれる:私はそれをデバッグするとき

vector<sameStruct> firstFunc(); 

for (unsigned int x = 0; x < v->size(); x++) 
{ 
    v[x]; 
} 

v[x]は今のように、元のベクトルの完全な内容を持っていますそれは添字/索引なしで前にしました。

しかし、私はそれ以上に進歩するために何もしていないと思います。

私のベクトルの中には約4つの変数があります。私はそれをデバッグするときに、必要な情報を持っていますが、私はそれに到達できません。

答えて

2

書かれているように、vは構造体のベクトルへのポインタです。

vに直接インデックスを付けると、ポインタが計算されます。 v [x]は位置xの構造体のベクトルです(vがポインタの最後にある単一オブジェクトの場合は配列、x> 0の場合はv [x]はガベージのみ)。これは、vが指すベクトルではなくポインタv自体に[x]を適用しているためです。

あなたが何か使用してベクターへのポインタと、インデックスを逆参照する必要があります:あなたはそのメンバ関数で取得するには、ベクトルのx番目の位置にあるオブジェクトへの参照を持っている。この時点で

(*v)[x]; 

を/変数は使用:

(*v)[x].variable; 

または

(*v)[x].memberfunction(parameters); 

あなたは、D場合

:あなたが呼び出されたときとまったく同じ方法でオブジェクトのメンバ関数にアクセスしているこの方法

v->at(x); 
v->at(x).variable; 
v->at(x).memberfunction; 

:O君のようなものを試してみてくださいその中の要素にアクセスその後、ベクトルを逆参照したくありません

v->size(); 

これが役立つことを願っています。

1

[]演算子を使用して要素にアクセスするには、オブジェクトに対してポインタを使用する必要があります。

試してください。

(*vec)[x]; 

例えば、代わりにの>オペレータ - ポインタに関数を呼び出すときに通常を使用することを

for (int i = 0; i < vec->size(); i++) 
{ 
    printf("Value at %d is %d\n", i, (*vec)[i]); 
} 

注意。演算子ですが、簡単に(* vec).some_func();を実行できます。代わりに。

[]、 - 、++などの演算子は、オブジェクトとポインタの両方で動作できます。オブジェクトの場合、それらは関数呼び出しとして機能しますが、ポインタ上ではアドレス上で数学演算として機能します。

たとえば、

pointer[nth]; 
*(pointer + nth); 

ポインタの最初からn番目のオブジェクトを返します。 。(第2の例では*の場所を確認し、それが適用されるオフセット

他の二つのヒント後を呼ばれています。

またとしてベクトルを渡すことで、このような間接参照の必要性を回避することができます参照、ポインタではなく。それは常に、適切な選択肢ではないのですが、それはクリーンなコードにつながるん。

void my_func(std::vector<int>& vector) 
{ 
    // vector can then be used as a regular variable 
} 

あなたは、あなたがのtypedefを使用することができます関数に多くのことを、特定のタイプのベクトルを渡すことするつもりならわかりやすく入力を省くためです。

typedef std::vector<int> IntVector; 

void my_func(IntVector& vector) 
{ 
} 
関連する問題