c++ - 迭代器上是否有一个 STL 适配器为每个集合元素调用回调?

标签 c++ stl c++14

我对以下用例的适配器特别感兴趣:

std::list<int> input {1, 2, 3};
std::list<int> result;
auto l = [](auto e) { return e + 1; };
result.insert(result.end(), adaptor(input.begin(), l), adaptor(input.end(), l));
// now result == {2, 3, 4}

如果适配器不使用外部库(例如 boost)就好了。

最佳答案

你的问题被标记为 C++14,并表示没有外部库依赖性会很好(足够公平)。

不过,为了将来引用,请注意 range库似乎正朝着被标准库(C++17 range for loop is already compliant with one of its major points)采用的方向发展。因此,使用 range,代码可能如下所示:

#include <list>
#include <range/v3/all.hpp>

int main() {
    const std::list<int> input{1, 2, 3};
    const std::list<int> result = 
        input | ranges::view::transform([](int i){ return i + 1; });
}

这就是 future 标准库 C++ 代码可能的样子。无论如何,它都有其优点:

  • 它看起来更直观(尽管这可能是主观的)。

  • 请注意如何使 result const

关于c++ - 迭代器上是否有一个 STL 适配器为每个集合元素调用回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39685406/

相关文章:

c++ - 建立索引 : Copies or pointers?

C++内存缓存数据结构

c++ - STL 不提供通过索引返回迭代器的函数有什么原因吗?

c++ - 如何从捕获移动的lambda表达式中创建std::function?

c++ - 分发 argument 参数包以调用两个仿函数

c++ - SDL 2 程序使用 1.4 GB 内存?

c++ - 为什么 std::string_view::data 不包含空终止符?

c++ - 获取对元组元素的引用

c++ - 什么时候可以应用自动返回类型?

c++ - union 虚拟继承