用于向量访问的c ++迭代器与指针

时间:2014-01-29 00:54:57

标签: c++ pointers iterator

对于向量,我可以使用迭代器和指针来访问它们的元素并迭代它们,例如:

std::vector<int> x {0, 1, 2};
std::vector<int>::iterator it = x.begin();
int *begin = &x[0];

迭代器和指针都可以访问同一个对象。但是,据我所知,首选方法是使用迭代器(对于除数组之外的任何容器)。这有什么特别的原因吗? (除了在我创建开始时我假设容器定义了一个[]操作的事实。)

1 个答案:

答案 0 :(得分:0)

除非您有特殊原因,否则请使用迭代器。几个重要的操作(例如inserterase等)需要迭代器,因此您通常需要咳嗽一个。迭代器也非常适合使用算法来完成与显式循环相关的复杂操作。此外,它们的通用性足以适用于所有容器,而不仅仅是vectorstring

当然,如果您处于需要指针的情况下(例如与C API进行交互,或跨模块边界进行交互),您就不应该感到肮脏&#34;关于这样做 - 指针很好。只要在必要时使用它们。

最后,在vector和string的特定情况下,一定要考虑索引。有些算法使用它们更具可读性,并且它们的优点是,如果向量被强制重新分配或类似的话,它们永远不会失效。 (请注意,这会将您锁定为矢量或字符串,以后可能会更换容器)