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()。
相關用法
- C++ std::forward_list::sort()用法及代碼示例
- C++ std::find_end用法及代碼示例
- C++ std::fill()用法及代碼示例
- C++ std::find_first_of()用法及代碼示例
- C++ std::front_inserter用法及代碼示例
- C++ std::find用法及代碼示例
- C++ std::find_first_of用法及代碼示例
- C++ std::find()用法及代碼示例
- C++ std::fill_n()用法及代碼示例
- C++ std::fstream::close()用法及代碼示例
- C++ std::max()用法及代碼示例
- C++ std::string::push_back()用法及代碼示例
- C++ std::less_equal用法及代碼示例
- C++ std::is_member_object_pointer模板用法及代碼示例
- C++ std::copy_n()用法及代碼示例
- C++ std::string::insert()用法及代碼示例
- C++ std::is_sorted_until用法及代碼示例
- C++ std::iota用法及代碼示例
- C++ std::numeric_limits::digits用法及代碼示例
- C++ std::string::data()用法及代碼示例
注:本文由純淨天空篩選整理自 std::for_each() in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。