2016-10-03 5 views
-3

特定の項目を変更します。はC++で、私はベクトルで一つのアイテムを追跡し、次のようにそれを修正したいと思いベクトル

vector<myObj> v; 

myObj obj = myObj(params) 
v.push_back(myObj); 

obj = myObj(params) 
v.push_back(myObj); 

obj = myObj(params) 
v.push_back(myObj); 

myObj* modThis = &v[2]; 
//modify modThis 

をしかし、私は私の本当のコードでこのような何かをするとき、それが唯一のA修正しますベクトル内の実際のオブジェクトを変更するのではなく、オブジェクトのコピーを作成します。私はmodThisと& v [2]のアドレスを表示しましたが、それらは同じではありません!私はまた、次のようなものを試してみました:

だけオブジェクトのコピーを作成し、コピーではなく、ベクトルに格納されている元のオブジェクトを変更し続けているようだ
myObj modThis = v[2]; 
//modiy myObj 

アイテムをコピーせずにベクター内のオブジェクトの変更にアクセスするにはどうすればよいですか?私は何が欠けていますか?

注:現在、myObjには、コンパイラによって生成されたコピーコンストラクタがあります。

+3

を助け

vec.at(1)->SetString("Modified string");

希望をや'&modThis '? – NathanOliver

+0

私はmodThisと&v [2]を印刷しましたが、それらは同じではありませんでした。 – imjojo42

+3

'v.push_back(myObj);'はコンパイルされません。 [mcve](http://stackoverflow.com/help/mcve)を提供して再現できるようにしてください。 – songyuanyao

答えて

0

配列内のオブジェクトを変更するには、ベクトル参照演算子を使用する必要があります。
正しい方法:

vec.at(1).SetString("Modified string");

あなたのベクトルは、その後のポインタを保持している場合:あなたは `印刷modThis`なかったあなたはアドレスを比較すると

+0

違いがありますか: 'vec.at(1).SetString(" mod "); ' と ' vec。[1] .SetString( "mod"); ' 彼らは同じですか、いいえ? – imjojo42

+0

彼らは同じです。どちらの場合も、配列内のオブジェクトへの参照を保持しており、このオブジェクトを直接操作しています。 – PazO

関連する問題