gpt4 book ai didi

c++ - STL 算法如何独立于 Iterator 类型工作?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:25:37 25 4
gpt4 key购买 nike

STL 算法如何独立于迭代器类型工作?

最佳答案

真的,他们只是工作。它们使用模板的一些非常基本的属性,有时称为静态多态性。如果您熟悉该术语,它本质上是一种鸭式输入形式。 (如果它长得像鸭子,而且叫起来像鸭子,那一定是鸭子)

技巧很简单。这是一个非常简单的例子:

template <typename T>
void say_hello(const T& t) {
t.hello();
}

say_hello 函数不关心它的参数是哪种类型。它不必从接口(interface)派生或做出任何其他类型的关于它是什么的“ promise ”。重要的是类型在这种情况下有效。我们对该类型所做的一切就是调用它的 hello 函数。这意味着这段代码将针对任何具有 hello 成员函数的类型进行编译。

STL 算法的工作原理类似。下面是 std::for_each 的简单实现:

template <typename iter_type, typename func_type>
void for_each(iter_type first, iter_type last, func_type f){
for (iter_type cur = first; cur != last; ++cur) {
f(*cur);
}
}

只要模板类型符合对它们的要求,这段代码就会编译; iter_type 必须有预递增++ 运算符。它必须有一个复制构造函数,并且必须有 != 运算符,并且必须有 *-dereference-operator。

func_type 必须实现函数调用运算符,采用与通过取消引用类型为 iter_type 的对象所获得的类型相同的参数。如果我用满足这些要求的类型调用 for_each,代码就会编译。 iter_type 可以是满足这些要求的任何类型。代码中没有任何内容表示“这将适用于 vector 迭代器、列表迭代器和映射迭代器”。但只要 vector、list 或 map 迭代器实现了我们使用的运算符,它就可以工作。

关于c++ - STL 算法如何独立于 Iterator 类型工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1021521/

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