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()。那么你就不需要减去一个。

于 2012-12-14T13:21:41.190 回答
8

您可以使用back()成员来获取对最后一个元素的引用:

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

或者,由于 push_back() 只是将对象添加到末尾,因此新插入元素的索引是向量大小减一:

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

如果您需要在拥有特定元素后定位它们,并且不想提前保存索引(以防您对向量执行排序/添加/删除/等操作),您也可以使用找算法

于 2012-12-14T13:27:37.547 回答
0

虽然NPE 的正确答案显示了一个务实的 POV,但我专注于这个简单答案的推理。可观察的行为只是push_back成员函数的目的:

将给定的元素值附加到容器的末尾。

所以索引总是等于v.size()插入前或v.size()-1插入后。如果无法满足此断言,则容器的容量无法增长,或者您的类在复制/移动构造函数中引发异常(请参阅文档中的异常部分)。

于 2016-11-22T11:13:38.533 回答