【发布时间】:2013-07-14 08:02:51
【问题描述】:
我寻找了相同类型的问题,但我没有找到我的问题的答案(存在问题): 我应该选择什么类型的钩子来控制列表中的对象? 我在指针和迭代器之间摇摆不定。
容器在开始时已被填充,之后不应调整大小。钩子是我用来根据用户一时兴起在我的对象之间切换并在我的算法中只操作一个变量的方式。
在所有情况下,我都必须通过一个迭代器来找到要挂钩的正确对象。但是哪一个是最佳实践/使用?
// 10 object list
std::list <Object> List(10);
std::list <Object>::iterator it = List.begin();
Object *pt = NULL;
// Select the 3rd object
advance(it, 3);
pt = &(*it);
// Access to object member...
it->member;
pt->member;
与迭代器相反,指针不允许访问邻居,但可能不安全。 最好的做法是什么?
【问题讨论】:
-
与大多数标准容器不同,在
std::list中,除非删除相应的元素,否则迭代器永远不会失效,因此它与原始指针一样(不)安全,但具有额外的好处,正如您所说, 以便能够从当前项目开始迭代。由于迭代器是非常轻量级的对象,因此选择其中任何一个都不会对性能产生任何影响,因此这完全取决于您。 -
如果容器在填充后没有更改,并且考虑到您示例中的访问模式,您可能会考虑使用您访问的
std::vector变为vec[3],这将为您提供对象。
标签: c++ list pointers iterator