【发布时间】:2016-01-12 09:23:06
【问题描述】:
C++ 标准库包含方便的模板类std::move_iterator。鉴于std::move 和std::forward 之间的密切关系,为什么没有等效的std::forward_iterator?用法示例:
template <typename C>
auto foo(C&& values)
{
remove_reference_t<C> result {};
result.reserve(values.size());
std::transform(std::make_forward_iterator<C>(std::begin(values)),
std::make_forward_iterator<C>(std::end(values))),
std::back_inserter(result), Bar());
return result;
}
我现在可以使用foo 的想法是:
std::vector<ComplexType> values {/* lots of values */};
auto copied_fooed = foo(values);
// or
auto moved_fooed = foo(std::move(values));
无需写两个foos。
【问题讨论】:
-
正确名称应为
std::forwardable_iterator以避免与经典前向迭代器发生冲突。 -
@Jarod42 谢谢。固定(我认为)。
-
您是在问为什么没有(提出建议?)或如何写?
-
@Barry 两者;两者并不相互排斥。要么没有充分的理由拥有一个,要么不可能拥有一个,要么是疏忽。我想知道哪个(以及为什么),当然如果是后者,我会考虑提出建议。一个有效的实现肯定会帮助回答这个问题。
标签: c++ c++11 iterator c++-standard-library