【发布时间】:2017-03-26 14:42:19
【问题描述】:
标准库中有什么东西可以让我遍历包含在两个范围交集中的对象吗?
特别是给定一个函数对象action,我想得到一个等价于的程序
/* some container supporting a push_back operation */ intersection;
std::set_intersection(first1, last1, first2, last2,
std::back_inserter(intersection));
for (auto const& element : intersection)
action(element);
无需插入intersection。当然,写这样的代码很容易,例如
template<class InputIt1, class InputIt2, class UnaryFunction>
void for_each_in_intersection(InputIt1 first1, InputIt1 last1,
InputIt2 first2, InputIt2 last2, UnaryFunction f)
{
while (first1 != last1 && first2 != last2)
{
if (*first1 < *first2)
++first1;
else
{
if (!(*first2 < *first1))
f(*first1++);
++first2;
}
}
}
但我希望标准库中已经有一些可用的东西。
【问题讨论】:
-
你只是想要一个指针容器来迭代吗?
-
Range-v3, Boost.Iterator, Boost.Range等都有这个功能,但不是直接在stdlib中。
-
@Muscampester 没有。看看possible implementation of
std::set_intersectionat cppreference.com。我想要将*d_first++ = *first1++;替换为action(*first1++);的相同代码。
标签: c++ stl containers c++14 c++-standard-library