17

オブジェクトが実際に挿入された位置を取得するにはどうすればよいですか?

#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

4

4 に答える 4

27

がベクトルの場合v、次のように位置(つまりインデックス)が得られます。

v.push_back(object);
size_t pos = v.size() - 1;

size()または、を呼び出す前に確認することもできますpush_back()。そうすれば、1を引く必要はありません。

于 2012-12-14T13:21:41.190 に答える
8

back()メンバーを使用して、最後の要素への参照を取得できます。

list.push_back(object);
list.back();

または、push_back()は単にオブジェクトを最後に追加するため、新しく挿入された要素のインデックスは、ベクトルサイズから1を引いたものになります。

list.push_back(object);
vector<my_class>::size_type object_pos = list.size() - 1;
于 2012-12-14T13:22:30.280 に答える
1

取得後に特定の要素を見つける必要があり、事前にインデックスを保存したくない場合(sort / add / remove / etcのようなベクトルに何かを行う場合)、アルゴリズムを検索します

于 2012-12-14T13:27:37.547 に答える
0

NPEの正解は実用的なPOVを示していますが、私はこの単純な答えの推論に集中します。観察可能な動作は、メンバー関数の目的にすぎませpush_backん。

指定された要素値をコンテナの最後に追加します。

したがって、インデックスは常にv.size()挿入前、または同等にv.size()-1挿入後と等しくなります。このアサーションを実行できない場合は、コンテナーの容量を増やすことができないか、クラスがコピー/移動コンストラクターで例外をスローします(ドキュメントの「例外」セクションを参照)。

于 2016-11-22T11:13:38.533 に答える