C++中std::transform的使用小結(jié)
使用std::transform函數(shù)需要包含<algorithm>頭文件
一元操作
std::transform
是 C++ 標準庫中的一個算法,用于將一個序列中的每個元素進行轉(zhuǎn)換,并將結(jié)果存儲在另一個序列中。該算法可以接受兩個輸入序列,對應位置的元素進行操作,然后將結(jié)果存儲在輸出序列中,也可以接受一個輸入序列,對其進行轉(zhuǎn)換后直接覆蓋原序列。
以下是 std::transform
函數(shù)的通用簽名
template <class InputIterator, class OutputIterator, class UnaryOperation> OutputIterator transform(InputIterator first1, InputIterator last1, OutputIterator result, UnaryOperation op);
std::transform
接受四個參數(shù):
first1
,last1
: 表示輸入序列的起始和結(jié)束迭代器,包括起始位置但不包括結(jié)束位置。result
: 表示輸出序列的起始迭代器,用于存儲轉(zhuǎn)換后的結(jié)果。op
: 一個一元函數(shù)對象(UnaryOperation),用于對輸入序列中的每個元素進行轉(zhuǎn)換操作。
以下是一個簡單的示例,演示了如何使用 std::transform
對一個向量中的每個元素進行平方操作,并將結(jié)果存儲在另一個向量中:
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> input = {1, 2, 3, 4, 5}; std::vector<int> output(input.size()); // 對 input 中的每個元素進行平方操作,結(jié)果存儲在 output 中 std::transform(input.begin(), input.end(), output.begin(), [](int x) { return x * x; }); // 輸出轉(zhuǎn)換后的結(jié)果 for (int num : output) { std::cout << num << " "; } std::cout << std::endl; return 0; }
在上面的示例中,我們使用 std::transform
對 input
中的每個元素進行平方操作,并將結(jié)果存儲在 output
中。通過提供一個 lambda 函數(shù) [](int x) { return x * x; }
作為轉(zhuǎn)換操作,我們將每個元素平方后存儲在 output
中。
總之,std::transform
是一個非常有用的算法,用于對序列中的元素進行轉(zhuǎn)換操作,并將結(jié)果存儲在另一個序列中。
二元操作
std::transform
函數(shù)還可以支持二元操作符,用于對兩個輸入序列中對應位置的元素進行操作,并將結(jié)果存儲在輸出序列中。以下是 std::transform
函數(shù)的另一個通用簽名,用于支持二元操作符:
template <class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation> OutputIterator transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, OutputIterator result, BinaryOperation binary_op);
std::transform
函數(shù)接受五個參數(shù):
first1
,last1
: 表示第一個輸入序列的起始和結(jié)束迭代器,包括起始位置但不包括結(jié)束位置。first2
: 表示第二個輸入序列的起始迭代器。result
: 表示輸出序列的起始迭代器,用于存儲兩個輸入序列對應位置元素進行操作后的結(jié)果。binary_op
: 一個二元函數(shù)對象(BinaryOperation),用于對兩個輸入序列中對應位置的元素進行操作。
以下是一個示例,演示了如何使用二元操作符的 std::transform
對兩個向量中對應位置的元素進行相加操作,并將結(jié)果存儲在另一個向量中:
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> vec1 = {1, 2, 3, 4, 5}; std::vector<int> vec2 = {10, 20, 30, 40, 50}; std::vector<int> result(vec1.size()); // 對 vec1 和 vec2 中對應位置的元素進行相加操作,結(jié)果存儲在 result 中 std::transform(vec1.begin(), vec1.end(), vec2.begin(), result.begin(), [](int x, int y) { return x + y; }); // 輸出相加后的結(jié)果 for (int num : result) { std::cout << num << " "; } std::cout << std::endl; return 0; }
在這個示例中,我們使用二元操作符的 std::transform
對 vec1
和 vec2
中對應位置的元素進行相加操作,并將結(jié)果存儲在 result
中。通過提供一個 lambda 函數(shù) [](int x, int y) { return x + y; }
作為二元操作符,我們將兩個向量中對應位置的元素相加后存儲在 result
中。
總之,std::transform
函數(shù)不僅支持一元操作符,還支持二元操作符,可以非常方便地對兩個序列中對應位置的元素進行操作,并將結(jié)果存儲在輸出序列中。
到此這篇關(guān)于C++中std::transform的使用的文章就介紹到這了,更多相關(guān)C++ std::transform 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C++中std::setw()的用法解讀
- c++中std::placeholders的使用方法
- c++ std::sort使用自定義的比較函數(shù)排序方式
- C++中std::thread{}和std::thread()用法
- C++中std::tuple和std::pair的高級用法
- c++之std::get_time和std::put_time
- C++中std::ios_base::floatfield報錯已解決
- C++中std::invalid_argument報錯解決
- C++中std::ifstream::readsome和std::ifstream::read的區(qū)別解析
- C++中的std::funture和std::promise實例詳解
- C++?std::copy與memcpy區(qū)別小結(jié)
- C++實現(xiàn)std::set的示例項目
相關(guān)文章
c++ Protobuf解決數(shù)據(jù)傳輸瓶頸面試精講
這篇文章主要介紹了c++ Protobuf解決數(shù)據(jù)傳輸瓶頸利器面試精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10C++利用MySQL API連接和操作數(shù)據(jù)庫實例詳解
這篇文章主要介紹了C++利用MySQL API連接和操作數(shù)據(jù)庫實例詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01c++ 數(shù)據(jù)結(jié)構(gòu)map的使用詳解
這篇文章主要介紹了c++ 數(shù)據(jù)結(jié)構(gòu)map的使用詳解,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下2021-04-04