C++中std::for_each的使用
std::for_each的使用
std::for_each
是 C++ 標(biāo)準(zhǔn)庫中的一個算法,用于遍歷容器并對每個元素執(zhí)行指定的操作。適用于 std::vector
、std::list
、std::array
等標(biāo)準(zhǔn)容器。
1. 語法
#include <algorithm> template<class InputIt, class UnaryFunction> UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f);
first
:起始迭代器(包含)。last
:結(jié)束迭代器(不包含)。f
:對元素執(zhí)行的函數(shù)對象,接受單個參數(shù)。
返回值:
返回 f
,即傳入的函數(shù)對象(可用于累積狀態(tài))。
2. 基本用法
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; // 使用 std::for_each 遍歷并打印元素 std::for_each(vec.begin(), vec.end(), [](int x) { std::cout << x << " "; }); return 0; }
輸出
1 2 3 4 5
3. 使用普通函數(shù)
#include <iostream> #include <vector> #include <algorithm> // 普通函數(shù) void printElement(int x) { std::cout << x << " "; } int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; std::for_each(vec.begin(), vec.end(), printElement); return 0; }
4. 使用 std::for_each 計算累積和
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; int sum = 0; std::for_each(vec.begin(), vec.end(), [&sum](int x) { sum += x; }); std::cout << "Sum: " << sum << std::endl; return 0; }
輸出
Sum: 15
這里使用了 Lambda 捕獲 [&sum]
來累加元素值。
5. 使用 std::for_each 修改元素
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; // 使用 std::for_each 修改元素 std::for_each(vec.begin(), vec.end(), [](int &x) { x *= 2; }); // 輸出修改后的值 for (int num : vec) { std::cout << num << " "; } return 0; }
輸出
2 4 6 8 10
注意:需要傳遞 int &x
才能修改原數(shù)據(jù)。
6. 與 range-based for 循環(huán)對比
使用 for_each
適用于需要函數(shù)對象(如 Lambda 或 functor),但 C++11 之后的 范圍 for
循環(huán) 更簡潔:
for (int &x : vec) { x *= 2; }
相比 std::for_each
,范圍 for
在可讀性上更好。
7. for_each 與函數(shù)對象
可以使用自定義仿函數(shù):
#include <iostream> #include <vector> #include <algorithm> struct Multiply { void operator()(int &x) const { x *= 3; } }; int main() { std::vector<int> vec = {1, 2, 3, 4, 5}; std::for_each(vec.begin(), vec.end(), Multiply()); for (int num : vec) { std::cout << num << " "; } return 0; }
輸出
3 6 9 12 15
仿函數(shù) 適用于復(fù)雜操作或需要在多個地方復(fù)用時。
8. 總結(jié)
方法 | 可讀性 | 適用場景 |
---|---|---|
std::for_each | 適中 | 需要 Lambda、仿函數(shù)或函數(shù)指針 |
range-based for | 高 | 適用于大多數(shù)遍歷任務(wù) |
普通 for 循環(huán) | 低 | 需要索引訪問元素 |
當(dāng)代碼需要傳遞回調(diào)(如 std::transform
或 std::accumulate
結(jié)合使用)時,std::for_each
更合適,否則推薦 范圍 for
語法。
到此這篇關(guān)于C++中std::for_each的使用的文章就介紹到這了,更多相關(guān)C++ std::for_each內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言驅(qū)動開發(fā)之內(nèi)核使用IO/DPC定時器詳解
本章將繼續(xù)探索驅(qū)動開發(fā)中的基礎(chǔ)部分,定時器在內(nèi)核中同樣很常用,在內(nèi)核中定時器可以使用兩種,即IO定時器,以及DPC定時器,感興趣的可以了解一下2023-04-04C語言如何實現(xiàn)一些算法或者函數(shù)你知道嗎
這篇文章主要為大家詳細介紹了C語言實現(xiàn)一些算法或者函數(shù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03