for_each使用

Posted cyssmile

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了for_each使用相关的知识,希望对你有一定的参考价值。

首先for_each的时候要加入头文件

#include<algorithm>

我在写一个让vector中数据都加2的函数
开始是这样写的

#include<iostream>
#include<iterator>
#include<vector>
#include<algorithm>
using namespace std;
template <typename T>
void add2(T i){
    i+=2;
    cout<<i<<endl;
}

int main(int argc, char** argv){
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    for_each(vec.begin(),vec.end(),add2<int>);
    copy(vec.begin(),vec.end(),ostream_iterator<int>(cout, " "));
}

结果是这样的:
技术图片
这里并不会改变vector中的数据,其实想想就明白,这里应该用引用或指针

#include<iostream>
#include<iterator>
#include<vector>
#include<algorithm>
using namespace std;
template <typename T>
void add2(T i){
    i+=2;
    cout<<i<<endl;
}
template <typename T>
void add(T& i){
    i+=1;
}
int main(int argc, char** argv){
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    for_each(vec.begin(),vec.end(),add2<int>);
    copy(vec.begin(),vec.end(),ostream_iterator<int>(cout, " "));
    for_each(vec.begin(),vec.end(),add<int>);
    cout<<endl;
    copy(vec.begin(),vec.end(),ostream_iterator<int>(cout, " "));
}


技术图片

2

如果想改变任意加的值可以这样写

int val = 2;
template <typename T>
void add(T& i){
    i+=val;
}

3

然后我们一直都知道全局变量不好吧,所以我们这样改

#include<iostream>
#include<iterator>
#include<vector>
#include<algorithm>
using namespace std;
template <typename T>
class AddValues{

    private:
        T val;

    public:
        AddValues(T j):val(j){}
        void operator()(int& i){
            cout<<i + val<<endl;
            i += val;
        }
};
int main(int argc, char** argv){
    vector<int> vec;
    vec.push_back(1);
    vec.push_back(2);
    vec.push_back(3);
    int x =2;
    for_each(vec.begin(),vec.end(),AddValues<int>(x));
    cout<<endl;
    copy(vec.begin(),vec.end(),ostream_iterator<int>(cout, " "));
}

技术图片

以上是关于for_each使用的主要内容,如果未能解决你的问题,请参考以下文章

使用 std::for_each lambda 函数的错误

使用 for_each 创建的资源中带有 for_each 的动态块

如何计算 std::for_each lambda 函数所需的类型

C++ STL for_each 的用法?

为啥在 std::for_each() 返回时调用转换运算符?

如何在 C++ 中使用 for_each 累积结果? [复制]