std 中for_each 算法与c++11范围for语句

标准库中for_each是函数模板其中有一个是有三个参数,前两个参数提供要遍历容器的范围,最后一个是函数对象可以获取到遍历容器时的每个结果,这个函数对象

可以操作容器内元素(表象)。


先来看看这个模板(标准库文件定义的摘取)

template<class InputIt, class UnaryFunction>
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f)
{
    for (; first != last; ++first) {
        f(*first);///对每次遍历结果都会调用函数对象
    }
    return f;
}
举个例子这样会很直观了解它的用法。正如我们注释所以我们有两步操作

1.创建可调用对象,给出操作方式

2.实例化模板进行调用

struct PrintData {

    PrintData() {
        qDebug() << "contruct";
    }
    
       ///【1】重载() 供for_each使用
 
 
    void operator() (int& a){
        a++;
    }
};
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
 
    QList<int> li;
    li << 9 << 8 << 7 << 6 << 5;
 
 
    std::for_each(li.begin(), li.end(), PrintData());///【2】实例化模板,参数三是一个可调用局部函数对象

 
 
    return a.exec();
}
 
 

接下来来说一下范围for语句。下面是语法 下边:后边必须是一个序列。与上边的for_each、c#的foreach 语句用法很像。

for(auto a : li) {
   qDebug() << a;
}


最后总结一下,实际我们可以使用迭代器对容器进行遍历更加方便。这里更多的是探索一下std的巧妙思想吧。

猜你喜欢

转载自blog.csdn.net/ypy9323/article/details/78767224
今日推荐