在迭代器上是否有STL适配器调用每个集合元素的回调
Is there an STL adaptor on iterator invoking callback for each collection element?
我对以下用例的适配器特别感兴趣:
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范围For循环已经符合其主要的一点)。因此,使用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; });
}
,这是未来的标准库c++代码可能是什么。无论如何,它有它的优点:
它看起来更直观(尽管这可能是主观的)。
注意如何使
result
变为const
所以使用PiotrSkotnicki建议,我最终得到这样的代码:
#include <algorithm>
#include <iterator>
#include <list>
int main() {
std::list<int> input {1, 2, 3};
std::list<int> output;
std::transform(input.begin(), input.end(), std::back_inserter(output), [](auto e){ return e + 1;});
}
相关文章:
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- c++找不到具有相同哈希的无序集合元素
- 从C++无序集合中高效提取元素
- 如何在比较时更改集合元素的值(在 c++ 中)?
- 打印无序映射的第二个元素,即集合
- 在集合中查找使用结构C++的元素
- 如何在集合中迭代替代元素(或进行特定大小的飞跃)?
- 消除集合的第一个元素
- 将集合的随机元素添加到列表中,然后将其从原始集合中移除
- 将字符串集合中的元素添加到字符串集合的向量中
- C++ 如何以特定模式遍历矢量的不同集合元素
- 为什么编译器不优化集合元素上的空范围循环?
- 集合元素类中定义的集合的比较器
- 修改集合元素
- 如何更改集合元素
- groot集合-元素访问
- 在迭代器上是否有STL适配器调用每个集合元素的回调
- 将多个集合元素合并为一个集合
- 使用哪种类型的指针来实现对集合元素的共享访问
- 在没有默认构造函数时初始化 STL 集合元素(不是指针)