進階篇_STL中通用演算法處理資料
1. for_each()演算法遍歷容器元素
形象地講,for_each()演算法像一個漏斗裝置,用具體的處理方法來做漏斗的漏紙,把容器中指定的元素遍歷倒入漏斗,將符合處理方法的容器元素進行處理
void addsalary(int& nsalary) //員工工資低於2000的漲30%
{
if(nsalary < 2000)
{
nsalary *= 1.3;
}
}
vector<int> vecsalary;
vecsalary.push_back(3200);
vecsalary.push_back(1983);
vecsalary.push_back(703);
for_each(vecsalary.begin(), vecsalary.end(), addsalary); //使用for_each演算法對容器中指定範圍的資料進行遍歷處理,處理方法為addsalary
2. 用find()和find_if()演算法實現線性查詢
如果找到,返回指向這個元素的迭代器,否則返回這個容器的末尾位置
find():
vector<string> vecgoods; //商品資訊的容器
vecgoods.push_back("eraser");
vecgoods.push_back("pencil");
vecgoods.push_back("pen");
string str = "ruler" //定義要購買的商品,老闆進行查詢
vector<string>::iterator it = vecgoods.find(vecgoods.begin(), vecgoods.end(), str); //find()函式
if(it != vecgoods.end())
cout<<*it<<endl;
else
cout<<"沒有ruler商品"<<endl;
find_if(),有時候並不一定想找某個特定的資料而是能夠找到符合某種條件的資料:
bool ispass(int n) //用函式定義查詢規則
{
return n>=60;
}
vector<int> vecscores;
vecscores.push_back(72);
vecscores.push_back(54);
vecscores.push_back(87);
vector<int>::iterator it = vecscores.begin(); //定義查詢的起始位置
do //利用迴圈,逐個查詢容器中符合條件的資料
{
it = find_if(it, vecscores.end(), ispass); //find_if()來查詢符合條件的資料,返回指向條件為true的迭代器或者容器末尾
if(it != vecscores.end())
{
cout<<"找到及格分數:"<<(*it)<<endl;
++it;
}
else
break;
}while(true);
3. remove()和replace()演算法:
bool isfail(int n) //用函式定義查詢規則
{
return n<60;
}
vector<int> vecscores;
vecscores.push_back(72);
vecscores.push_back(54); //不及格
vecscores.push_back(87);
vecscores.push_back(-1); //缺考
remove(vecscores.begin(), vecscores.end(), -1); //刪除所有缺考的成績
replace(vecscores.begin(), vecscores.end(), isfail, 60); //將所有不及格的成績替換為60
4. 容器元素的複製與變換:copy()演算法和merge()演算法
copy():將一個容器的元素複製到另外一個容器中去。三個引數:源容器的起始與終止位置,目標容器的起始位置
//三個引數:源容器的起始與終止位置,目標容器的起始位置
//正向複製copy(),從目標起始位置向後放置資料
vector<int> vecscoreC1;
vector<int> vecscoreC2; //儲存C1、C2班級成績的兩個容器
vector<int> vecscore; //儲存所有成績的總容器
vecscore.resize() = vecscoreC1.size() + vecscoreC2.size(); //重新設定總容器的容量
vector<int>::iterator lastit = copy(vecscoreC1.begin(), vecscoreC1.end(), vecscore.begin()); //將C1容器的資料複製到總容器中
copy(vecscoreC2.begin(), vecscoreC2.end(), lastit);//將C2容器的資料追加到vectorscore的末尾lastit
//逆向複製copy_backward(),從目標起始位置向前放置資料
merge():除了使用copy()煩瑣地逐個複製元素實現兩個容器的合併之外,STL提供merge()專門用來講兩個源容器的資料合併到目標容器的演算法。在使用merge()演算法進行合併之前,必須使用sort()演算法對兩個源容器中的資料進行排序
vector<int> vecscoreC1;
vector<int> vecscoreC2; //儲存C1、C2班級成績的兩個容器
vector<int> vecscore; //儲存所有成績的總容器
sort(vecscoreC1.begin(), vecscoreC1.end());
sort(vecscoreC2.begin(), vecscoreC2.end()); //sort()排序先
vecscore.resize() = vecscoreC1.size() + vecscoreC2.size(); //重新設定總容器的容量
merge(vecscoreC1.begin(), vecscoreC1.end(), vecscoreC2.begin(), vecscoreC2.end(), vecscore.begin());
5. set_union演算法:合併兩個源容器,相同資料只保留一份
//set_union()實現資料元素的不重複,只能出現一次的將源容器資料合併到目標容器中,當然使用前同樣要sort()排序
vector<string> vecgoods; //總商品清單
vector<string> vecstation; //文具類清單
vector<string> vecoffice; //辦公類清單
vecstation.push_back("pen");
vecstation.push_back("pencil");
vecoffice.push_back("folder");
vecoffice.push_back("pen");
vecgoods.resize(vecstation.size() + vecoffice.size());
sort(vecstation.begin(), vecstation.end());
sort(vecoffice.begin(), vecoffice.end());
//set_union()演算法返回的是指向合併後的目標容器中最後一個資料的迭代器
vector<string>::iterator itend = set_union( vecstation.begin(), vecstation.end(),
vecoffice.begin(), vecoffice.end(), vecgoods.begin() );
for(auto it = vecgoods.begin(); it!=itend; ++it)
cout<<*it<<endl; //輸出合併後的商品
6. 變換容器元素:transform函式
相關文章
- 進階篇_STL中的容器
- Python 資料處理庫 pandas 進階教程Python
- 進階篇_STL詳解(函式模板特化,類别範本特化,用模板實現自己的通用演算法)函式演算法
- 【資料庫】Redis進階篇資料庫Redis
- Python 快速教程(進階篇08):異常處理Python
- C++進階:STL演算法9--邊界C++演算法
- 前端進階 | 資料結構與演算法之 LeetCode 篇前端資料結構演算法LeetCode
- pandas(進階操作)-- 處理非數值型資料 -- 資料分析三劍客(核心)
- 第五篇:資料預處理(二) - 異常值處理
- 第四篇:資料預處理(一) - 缺失值處理
- 深度學習——資料預處理篇深度學習
- JavaScript 資料處理 - 對映表篇JavaScript
- Java進階02 異常處理Java
- Pandas高階教程之:處理text資料
- Pandas高階教程之:處理缺失資料
- C++_STL—演算法Algorithm篇C++演算法Go
- sklearn 第二篇:資料預處理
- 資料結構與演算法 進階排序資料結構演算法排序
- Excel高階應用教程:資料處理與資料分析Excel
- Python進階08 異常處理Python
- 配置Hanlp自然語言處理進階HanLP自然語言處理
- 《深度學習進階:自然語言處理》中的網址深度學習自然語言處理
- Oracle對資料進行加密&解密處理Oracle加密解密
- 機器學習 第2篇:資料預處理(缺失值)機器學習
- 《MySQL 進階篇》十七:資料庫其他調優策略MySql資料庫
- 機器學習 第3篇:資料預處理(使用插補法處理缺失值)機器學習
- 訊號處理板卡學習資料第524篇:基於XCZU15EG的FMC+ 高效能通用訊號處理板卡
- VIM 進階 —— 《VIM 8 文字處理實戰》
- Redux 進階 — 優雅的處理 async actionRedux
- Redux 進階 -- 優雅的處理 async actionRedux
- 左神直通BAT演算法(進階篇)-上BAT演算法
- 資料庫開發(22)高階事務處理資料庫
- 利用Python Pandas進行資料預處理-資料清洗Python
- 海量資料處理_使用外部表進行資料遷移
- Python資料處理(二):處理 Excel 資料PythonExcel
- 第六篇:資料預處理(三) - 資料標準化
- 資料處理
- 使用Spark和Cassandra進行資料處理(一)Spark