相关疑难解决方法(0)

std :: for_each在多个迭代器范围内工作

lambda表示法使得stl算法更易于访问.我仍然在学习什么时候它有用以及何时回归到老式的for-loops.通常,有必要迭代两个(或更多)相同大小的容器,使得相应的元素是相关的,但由于某种原因不会被打包到同一个类中.

使用for循环实现的函数如下所示:

template<typename Data, typename Property>
void foo(vector<Data>& data, vector<Property>& prop) {
    auto i_data = begin(data);
    auto i_prop = begin(prop);
    for (; i_data != data.end(); ++i_data, ++i_prop) {
        if (i_prop->SomePropertySatistfied()) {
            i_data->DoSomething();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了使用for_each,我需要一个处理多个范围的版本; 就像是:

template<typename InputIter1, typename InputIter2, typename Function>
Function for_each_on_two_ranges(InputIter1 first1, InputIter1 last1, InputIter2 first2, Function f) {
    for (; first1 != last1; ++first1, ++first2) {
        f(*first1, *first2);
    }
    return f;
}
Run Code Online (Sandbox Code Playgroud)

使用此版本,上面的代码如下所示:

template<typename Data, typename Property>
void foo_two_ranges(vector<Data>& data, vector<Property>& prop) {
    for_each_on_two_ranges(begin(data), end(data), …
Run Code Online (Sandbox Code Playgroud)

c++ boost stl c++11

11
推荐指数
2
解决办法
2251
查看次数

标签 统计

boost ×1

c++ ×1

c++11 ×1

stl ×1