+-
c – 一般来说什么是迭代器?
当我尝试使用接受“general iterator”的ctor编写C类模板时,会出现此问题.我不知道在这里使用general这个词是否合适,但我的意思是它可以像STL容器一样接受迭代器.

换句话说,我对迭代器感到困惑.似乎所有STL容器都具有相同类型的迭代器,那么该类型是什么?它只是指针吗?还是更复杂的东西?但是STL容器确实接受普通指针.

(我想将它与Iterator< T>在Java中进行比较,这很简单,它只是一个类)

最佳答案
在C中,Iterator是一个概念,不是具体(或抽象)类型,而是任何遵循规则等迭代器的类型.

例如,迭代器通常可以递增i.可以访问它们(解除引用)* i以获取它们当前指向的值.它们本质上是指针的抽象.

在标准库的容器和容器中算法有不同种类的迭代器具有不同的属性.它们的属性列在这里:

https://en.cppreference.com/w/cpp/iterator

因此,当在C中编写接受迭代器的算法时,通常只接受通用模板参数并在函数中使用适当的迭代器属性.如果用户向您的函数传递了一些不遵守迭代器规则的东西,编译器会抱怨:

template<typename Iterator>
void my_algorithm(Iterator begin, Iterator end)
{
    for(; begin != end; ++begin)
        std::cout << *begin << '\n';
}

您可以添加一大堆特定的检查,以确保用户传递了一些合理的东西,但这对于这个问题来说太宽泛了.

注意:

虽然目前的概念(例如Iterator)仅仅是程序员必须遵循的标准中的一组商定的语义属性,但是将更准确地将这些概念(代码中)形式化的更全面的解决方案将用于标准的下一版本C++20.

点击查看更多相关文章

转载注明原文:c – 一般来说什么是迭代器? - 乐贴网