繁体   English   中英

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

[英]c++ iterator vs pointer for vector access

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

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

迭代器和指针都可以访问同一对象。 但是,据我所知,首选方法是使用迭代器(用于除数组之外的任何容器)。 是否有特定原因? (除了在我创建begin的过程中,我假设容器已定义了[]操作。)

除非有特殊原因,否则请使用迭代器。 一些重要的操作(例如inserterase等)需要迭代器,因此无论如何您通常都需要咳嗽一声。 迭代器还可以很好地与算法配合使用,以完成复杂的,显式循环难以处理的事情。 另外,它们足够通用,可以用于所有容器,而不仅仅是vectorstring

当然,如果您确实需要指针(例如与C API进行交互或跨模块边界进行交互),那么您也不应为此感到“肮脏”-指针很好。 仅在必要时使用它们。

最后,在向量和字符串的特定情况下,一定要考虑索引。 某些算法使用它们更具可读性,它们的优点是,如果强制重新分配向量或类似的东西,它们永远不会失效。 (请注意,这会将您锁定到向量或字符串中,并可能使以后更改容器变得困难)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM