+-

当我尝试使用接受“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 – 一般来说什么是迭代器? - 乐贴网