gpt4 book ai didi

c++ - 一般来说,什么是迭代器?

转载 作者:IT老高 更新时间:2023-10-28 12:47:17 27 4
gpt4 key购买 nike

当我尝试使用接受“通用迭代器”的 ctor 编写 C++ 类模板时,就会出现这个问题。我不知道这里用general这个词是否合适,但我的意思是它可以像STL容器一样接受迭代器。

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

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

最佳答案

在 C++ 中,迭代器是一个概念,不是具体(或抽象)类型,而是任何遵循某些的类型迭代器喜欢规则。

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

在标准库的容器和算法中,存在具有不同属性的不同类型的迭代器。它们的属性在此处列出:

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

因此,当在 C++ 中编写接受迭代器的算法时,通常只接受 generic 模板参数并在函数中使用适当的迭代器属性。如果用户向您的函数传递了不遵守迭代器规则的内容,编译器会报错:

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

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

注意:

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

关于c++ - 一般来说,什么是迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51586495/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com