Ответ 1
Если v
- ваш вектор, ниже будет указано положение (то есть индекс):
v.push_back(object);
size_t pos = v.size() - 1;
Или вы можете посмотреть size()
перед вызовом push_back()
. Тогда вам не нужно будет вычитать его.
Как я могу получить позицию, в которой был вставлен мой объект?
#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()
. Тогда вам не нужно будет вычитать его.
Вы можете использовать элемент back(), чтобы получить ссылку на последний элемент:
list.push_back(object);
list.back();
Или, поскольку push_back() просто добавляет объект в конец, индекс вновь вставленного элемента равен размеру вектора минус единица:
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
после вставки. Если это утверждение не может быть выполнено, емкость контейнера не может быть выращена или ваш класс выдает исключение в конструкторе copy/move (см. Раздел Exceptions в документации).