获取插入到矢量中的对象的索引

时间:2012-12-14 13:20:16

标签: c++ stl vector std

如何获得实际插入物体的位置?

#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 个答案:

答案 0 :(得分:18)

如果v是您的向量,则以下内容将为您提供位置(即索引):

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

或者您可以在致电size()之前查看push_back()。然后你不需要减去一个。

答案 1 :(得分:7)

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

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

或者,因为push_back()只是将对象添加到结尾,所以新插入元素的索引是向量大小减去1:

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

答案 2 :(得分:1)

如果您需要在拥有它们之后找到它们,并且您不想提前保存索引(如果您对向量执行某些操作,例如sort / add / remove / etc),您可以也使用find algorithm

答案 3 :(得分:0)

虽然NPE's correct answer显示出务实的POV,但我专注于推理这个简单的答案。可观察的行为是just the purpose of the push_back member function

  

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

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