C ++(stl)与Java中的迭代器在概念上有区别吗?


问题内容

在离开了一段时间并尝试清除旧瓜后,我将返回c ++。

在Java迭代器是一个具有方法容器的接口:hasNext()next()remove()hasNext()手段的存在 具有对
被越过的容器 的限制的概念

//with an Iterator
Iterator<String> iter = trees.iterator();
while (iter.hasNext()) 
{
    System.out.println(iter.next());
}

在C ++标准模板库中,迭代器似乎表示支持的数据类型或类operator++operator==没有 内置 限制的概念,
因此在进行下一个项目之前需要进行比较。在正常情况下,第二个迭代器是容器端,用户必须比较两个迭代器来检查限制。

vector<int> vec;
vector<int>::iterator iter;

// Add some elements to vector
v.push_back(1);
v.push_back(4);
v.push_back(8);

for (iter= v.begin(); iter != v.end(); iter++)
{
    cout << *i << " "; //Should output 1 4 8
}

有趣的是,在C ++中,指针是数组的迭代器。STL吸收了现有内容并围绕其建立约定。

我还缺少进一步的微妙之处吗?


问题答案:

是的,在概念上有很大的不同。C
++使用了不同的迭代器“类”。有些用于随机访问(不同于Java),有些用于前向访问(类似于Java)。尽管其他人也用于写数据(例如与一起使用transform)。

请参阅C ++文档中的迭代器概念:

  • 输入迭代器
  • 输出迭代器
  • 正向迭代器
  • 双向迭代器
  • 随机访问迭代器

与Java / C#的微不足道的迭代器相比,它们更加有趣和强大。希望这些约定将使用C ++
0x的Concepts进行整理。