如何获得我的对象实际插入的位置?
#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;
如果您需要在拥有特定元素后定位它们,并且不想提前保存索引(以防您对向量执行排序/添加/删除/等操作),您也可以使用找算法。
虽然NPE 的正确答案显示了一个务实的 POV,但我专注于这个简单答案的推理。可观察的行为只是push_back
成员函数的目的:
将给定的元素值附加到容器的末尾。
所以索引总是等于v.size()
插入前或v.size()-1
插入后。如果无法满足此断言,则容器的容量无法增长,或者您的类在复制/移动构造函数中引发异常(请参阅文档中的异常部分)。