オブジェクトが実際に挿入された位置を取得するにはどうすればよいですか?
#include <vector>
using namespace std;
vector<SomeClass> list;
SomeClass object;
list.push_back(object);
list[...].method(); // I do not have the key
残念ながらpush_back
、戻りタイプは。であるため、何も返しませんvoid
。
がベクトルの場合v
、次のように位置(つまりインデックス)が得られます。
v.push_back(object);
size_t pos = v.size() - 1;
size()
または、を呼び出す前に確認することもできますpush_back()
。そうすれば、1を引く必要はありません。
back()メンバーを使用して、最後の要素への参照を取得できます。
list.push_back(object);
list.back();
または、push_back()は単にオブジェクトを最後に追加するため、新しく挿入された要素のインデックスは、ベクトルサイズから1を引いたものになります。
list.push_back(object);
vector<my_class>::size_type object_pos = list.size() - 1;
取得後に特定の要素を見つける必要があり、事前にインデックスを保存したくない場合(sort / add / remove / etcのようなベクトルに何かを行う場合)、アルゴリズムを検索します。
NPEの正解は実用的なPOVを示していますが、私はこの単純な答えの推論に集中します。観察可能な動作は、メンバー関数の目的にすぎませpush_back
ん。
指定された要素値をコンテナの最後に追加します。
したがって、インデックスは常にv.size()
挿入前、または同等にv.size()-1
挿入後と等しくなります。このアサーションを実行できない場合は、コンテナーの容量を増やすことができないか、クラスがコピー/移動コンストラクターで例外をスローします(ドキュメントの「例外」セクションを参照)。