当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ std::for_each()用法及代码示例


std::for_each()

for_each() 是一个非常有用的函数,它有助于在 STL 容器中的每个元素上调用函数 fn()。这实际上有助于编写简短的代码并减少我们代码库的大小。

下面是 for_each() 的语法,

用法:

for_each(
    InputIterator first, 
    InputIterator last, 
    Function fn);

其中,

  • InputIterator first= 容器的启动
  • InputIterator last= 容器结束
  • Function fn= 要在容器的每个元素上调用的函数

以下是有效使用 for_each() 的示例。

1) 打印所有元素

For each 可用于打印任何容器中的元素。下面是我们打印矢量和Map以了解用法的示例。

#include <bits/stdc++.h>
using namespace std;

void myfunc1(int i)
{
    cout << i << " ";
}

void myfunc2(pair<char, int> p)
{ //ecah element of a map is pair
    cout << p.first << "->" << p.second << endl;
}

int main()
{
    vector<int> arr{ 3, 4, 2, 6, 5, 1 };
 
    map<char, int> mymap;
 
    mymap['a'] = 3;
    mymap['c'] = 3;
    mymap['b'] = 6;
    mymap['d'] = 4;
    mymap['e'] = 2;
    mymap['f'] = 1;

    cout << "Printing the vector\n";
    for_each(arr.begin(), arr.end(), myfunc1);
    cout << "\n";
 
    cout << "Printing the map\n";
    for_each(mymap.begin(), mymap.end(), myfunc2);
    cout << "\n";
    
    return 0;
}

输出:

Printing the vector
3 4 2 6 5 1
Printing the map
a->3
b->6
c->3
d->4
e->2
f->1

2) 将元音替换为 '*'

在这个例子中,我们将看到如何更新容器的元素。我们可以通过传递对元素的引用和函数内的更新来更新。在早期的文章中,我们看到了如何使用 find_first_of() 替换元音。在下面的程序中,我们使用 for_each() 替换了所有元音,它更有效并且只需要 O(n)。

#include <bits/stdc++.h>
using namespace std;

void myfunc(char& c)
{ //to update reference is passed

    if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'o')
        c = '*';
}

int main()
{
    string str = "includehelp";
    
    cout << "Initially string is:" << str << endl;
    for_each(str.begin(), str.end(), myfunc);
    cout << "After updation\n";
    cout << str << endl;
    
    return 0;
}

输出:

Initially string is:includehelp
After updation
*nclud*h*lp

所以,使用 for_each() 的好处是它减少了代码库的大小并使代码产品级别。此外,时间复杂度为 O(n)。如果有任何情况,其中每个元素都经过大型代码库的大量处理,您可以使用 for_each()。



相关用法


注:本文由纯净天空筛选整理自 std::for_each() in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。