Получить индекс объекта, вставленного в вектор

Как я могу получить позицию, в которой был вставлен мой объект?

#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.

Ответ 1

Если v - ваш вектор, ниже будет указано положение (то есть индекс):

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

Или вы можете посмотреть size() перед вызовом push_back(). Тогда вам не нужно будет вычитать его.

Ответ 2

Вы можете использовать элемент back(), чтобы получить ссылку на последний элемент:

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

Или, поскольку push_back() просто добавляет объект в конец, индекс вновь вставленного элемента равен размеру вектора минус единица:

list.push_back(object);
vector<my_class>::size_type object_pos = list.size() - 1;

Ответ 3

Если вам нужно найти определенный элемент после того, как у вас есть, и вы не хотите заранее сохранять индекс (в случае, если вы что-то делаете с вектором, например sort/add/remove/etc), вы можете также используйте найти алгоритм.

Ответ 4

В то время как правильный ответ NPE показывает прагматичный POV, я концентрируюсь на рассуждении для этого простого ответа. Наблюдаемое поведение просто назначение функции члена push_back:

Добавляет заданное значение элемента в конец контейнера.

Таким образом, индекс всегда равен v.size() перед вставкой или, что то же самое, v.size()-1 после вставки. Если это утверждение не может быть выполнено, емкость контейнера не может быть выращена или ваш класс выдает исключение в конструкторе copy/move (см. Раздел Exceptions в документации).