2012-12-14 35 views
9

如何获取实际插入对象的位置?获取插入到向量中的对象的索引

#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不返回任何东西。

+5

作为一个无关的提示,千万不要使用'list'作为变量的名字,特别是不能用于'vector'类型的变量。 'list'也是标准库中的一个容器。任何需要阅读此代码的人都有一个名为列表的向量将成为持续的悲痛之源。 –

+1

我从'class'(这是无效的C++)将类的名称改为'SomeClass',并添加了[关于这个想法的想法](http://stackoverflow.com/a/40740375/2932052),看似“微不足道的行为“。 – Wolf

回答

14

如果v是您的载体,下面会给你的位置(即指数):

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

或者你可以看看size()调用push_back()之前。那么你不需要减去一个。

+0

感谢您的答案和提示在插入前查看尺寸。 – danijar

6

可以使用back()构件以获得对最后一个元素的引用:)

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

或者,由于的push_back(简单地将对象添加到结束时,将新插入的元素的索引是矢量大小减一:

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

我认为给出了一个迭代器指向最后插入的元素?那一刻,我对索引更感兴趣,因为索引是对象本身的整数。 – danijar

+0

@sharethis不,back()返回一个引用。要获取插入元素的索引,请计算新的矢量大小并减去一个。 –

+0

同样,'&v.back() - &v.front()'之后。 – MSalters

1

如果你需要你照顾他们找到一个特定的元素,并且不希望保存的时间提前索引(如果你做的东西像那种矢量/添加/删除/等),你也可以使用find algorithm

+0

那么,你知道你插入了多少元素,所以你可以比使用'find'找到索引要容易得多(而且效率要高得多)。 –

+1

我在说,如果你需要在插入元素后找到某个键​​,并且你还没有保存你想要的索引,这可能会起作用。根据问题考虑另一种工具。 – WildCrustacean

0

尽管NPE's correct answer显示了一个实用的POV,我专注于推理这个简单的答案。可观察的行为是just the purpose of the push_back member function

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

所以索引始终插入之前等于v.size()或,等价地,v.size()-1插入之后。如果这个断言无法实现,容器的容量不能增长,或者类在复制/移动构造函数中抛出异常(请参阅文档中的部分Exceptions)。