我对以下用例的适配器特别感兴趣:
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/