在 STL 库中,一些容器具有迭代器,通常认为它们是遍历这些容器的一种更好的方式,而不是简单的 for 循环,例如
for ( int i=0; i < vecVector.size(); i++ )
{
..
}
谁能告诉我为什么以及在什么情况下我应该使用迭代器以及在什么情况下上面的代码片段?
最佳答案
请注意,vector 的通常实现不会使用“int”作为索引/大小的类型。所以你的代码至少会引发编译器警告。
通用性
迭代器增加了代码的通用性。
例如:
typedef std::vector<int> Container ;
void doSomething(Container & p_aC)
{
for(Container::iterator it = p_aC.begin(), itEnd = p_aC.end(); it != itEnd; ++it)
{
int & i = *it ; // i is now a reference to the value iterated
// do something with "i"
}
}
现在,假设您将 vector 更改为列表(因为在您的情况下,列表现在更好)。只需要修改typedef声明,重新编译代码即可。
如果您改为使用基于索引的代码,则需要重新编写。
访问
迭代器应该被视为一种 super 指针。 它“指向”值(或者,在映射的情况下,指向键/值对)。
但它具有移动到容器中下一项的方法。或者上一个。有些容器甚至提供随机访问( vector 和双端队列)。
算法
大多数 STL 算法都适用于迭代器或迭代器范围(同样,因为通用性)。您将无法在此处使用索引。
关于c++ - 迭代器..为什么要使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/178934/