C++-STL學習——STL-algorithm.doc_第1頁
C++-STL學習——STL-algorithm.doc_第2頁
C++-STL學習——STL-algorithm.doc_第3頁
C++-STL學習——STL-algorithm.doc_第4頁
C++-STL學習——STL-algorithm.doc_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

C+ STL學習STL_algorithm今天我們來講講STL中比較大的一個庫. 主要是一些算法的運算的實現(xiàn),示例代碼上傳至 /chenyufeng1991/STL_algorithm 。 在使用STL中的algorithm之前,需要導入頭文件#include.(1)max(),min()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void MaxAndMin() int maxI = 3; int maxJ = 4; cout 較大值為: max(maxI,maxJ) endl; cout 較小值為: min(maxI,maxJ) endl; max和min就是取兩個數(shù)中的最大值與最小值。(2)由于下面有些方法的示例需要打印vector,所以我在這里先實現(xiàn)vector的打印算法cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void PrintVector(vector v) vector:iterator vIterator; for (vIterator = v.begin(); vIterator != v.end(); vIterator+) cout *vIterator ; cout endl; 這里使用迭代器來訪問vector,并按順序打印結(jié)果。(3)sort(),reverse()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void SortAndReverse() vector myVector; myVector.push_back(2); myVector.push_back(9); myVector.push_back(1); myVector.push_back(0); myVector.push_back(7); cout 排序前的序列:; PrintVector(myVector); sort(myVector.begin(), myVector.end(); cout 升序排序后的序列:; PrintVector(myVector); reverse(myVector.begin(), myVector.end(); cout 降序排序后的序列:; PrintVector(myVector); sort是升序排序函數(shù),reverse是降序排序函數(shù)。vector本身自己也有sort可以直接調(diào)用。(4)find()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void FindVector() vector myVector; myVector.push_back(2); myVector.push_back(4); myVector.push_back(6); myVector.push_back(8); myVector.push_back(0); vector:iterator vIterator; vIterator = find(myVector.begin(), myVector.end(), 6); if (vIterator = myVector.end() cout 未找到 endl; else cout 找到: *vIterator endl; find函數(shù)使用迭代器來進行查找某個數(shù),如果到達end位置還沒有找到,則表示沒有這個數(shù)。迭代器會在第一次出現(xiàn)該數(shù)字時返回。(5)equal()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void EqualVector() vector myVector1; myVector1.push_back(1); myVector1.push_back(5); myVector1.push_back(7); myVector1.push_back(9); vector myVector2; myVector2.push_back(1); myVector2.push_back(5); myVector2.push_back(7); myVector2.push_back(9); bool isEqual = equal(myVector1.begin(), myVector1.end(), myVector2.begin(); if (isEqual) cout 相等 endl; else cout 不相等 endl; equal()可以判斷兩個vector是否相等,equal會根據(jù)每一個位置去進行比較。(6)merge()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void MergeVector() vector myVector1; myVector1.push_back(1); myVector1.push_back(5); myVector1.push_back(7); myVector1.push_back(9); vector myVector2; myVector2.push_back(2); myVector2.push_back(3); myVector2.push_back(4); myVector2.push_back(5); / 需要在合并前排序 sort(myVector1.begin(), myVector1.end(); sort(myVector2.begin(), myVector2.end(); / 需要指定結(jié)果集的大小 vector myResult(8); merge(myVector1.begin(), myVector1.end(), myVector2.begin(), myVector2.end(), myResult.begin(); cout 合并后的序列為:; PrintVector(myResult); merge可以實現(xiàn)兩個有序vector的合并,合并后的vector依然是有序的。合并后的vector放到新的結(jié)果集中,需要事先指定其大小。(7)swap()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void SwapObject() int i = 2; int j = 3; cout 交換之前兩個數(shù)的值:; cout i = i ;j = j endl; swap(i, j); cout 交換之后兩個數(shù)的值:; cout i = i ;j = j unique-erase / vector可以由數(shù)組進行初始化 void UniqueVector() int array = 5, 3, 1, 3, 2, 5; vector vectorFromArray(array, array + sizeof(array) / sizeof(int); sort(vectorFromArray.begin(), vectorFromArray.end(); vector:iterator iter = unique(vectorFromArray.begin(), vectorFromArray.end(); vectorFromArray.erase(iter, vectorFromArray.end(); cout 去重之后的序列:; PrintVector(vectorFromArray); 由代碼中可以看到,vector并不一定需要通過push_back來創(chuàng)建,而是可以通過array初始化。這里的去重有一個缺點,就是需要先進行排序,也就是會改變原先vector的結(jié)構(gòu)。(9)replace()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void ReplaceVector() int array = 2, 4, 6, 8, 9; vector myVector(array, array + sizeof(array) / sizeof(int); cout 替換之前的序列:; PrintVector(myVector); replace(myVector.begin(), myVector.end(), 8, 888); cout 替換之后的序列:; PrintVector(myVector); replace會查找原先序列中是否有某個數(shù),若存在,則會進行替換。(10)remove()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片/ 刪除操作和去重操作是類似的,實際使用remove的時候,并沒有刪除那個元素,而是用后面的那個 / 元素替代了想要刪除的元素。最后要使用erase方法刪除。 / 但是只能刪除第一次出現(xiàn)的那個數(shù)字,而第二個元素不可刪除。 void RemoveVector() int array = 1, 2, 3, 4, 5; vector myVector(array, array + sizeof(array) / sizeof(int); cout 刪除元素前的序列:; PrintVector(myVector); vector:iterator Iter = remove(myVector.begin(), myVector.end(), 4); myVector.erase(Iter); cout 刪除元素前的序列:; PrintVector(myVector); 刪除vector中的某個元素,首先使用迭代器來進行定位,然后使用erase進行擦除。注意,只能刪除第一次出現(xiàn)的該數(shù)字,第二次出現(xiàn)的該數(shù)組則不能被刪除。(11)for-each()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片/ 遍歷序列中的每個元素,然后去執(zhí)行某個方法 void ForEach() int array = 3, 5, 7, 9, 1; vector myVector(array, array + sizeof(array) / sizeof(int); cout for-each之前的序列:; PrintVector(myVector); for_each(myVector.begin(), myVector.end(), PrintElement); cout for-each之后的序列:; PrintVector(myVector); / 傳引用,就可以改變原序列 void PrintElement(int &ele) ele = ele * ele; for-each是對序列中的每個元素進行快速遍歷,然后在遍歷過程中對每個元素執(zhí)行一定的操作,示例代碼中是對每個元素求平方,這樣就可以改變原序列。(12)count()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void CountVector() int array = 4, 4, 6, 9, 0, 0, 0; vector myVector(array, array + sizeof(array) / sizeof(int); / 這里默認返回的是long long num = count(myVector.begin(), myVector.end(), 0); cout 某個值出現(xiàn)的次數(shù)為: num endl; count用于計算某個值出現(xiàn)的次數(shù)。(13)copy()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void CopyVector() int arr = 2, 3, 4, 5, 6; vector myVector(arr, arr + sizeof(arr) / sizeof(int); / 這里需要指定大小 vector myVectorCopy(5); copy(myVector.begin(), myVector.end(), myVectorCopy.begin(); cout 拷貝后的序列為:; PrintVector(myVctorCopy); 可以根據(jù)原有的序列復制出一個新的序列,需要事先指定大小。(14)generate()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void GenerateVector() vector myVector(6); generate(myVector.begin(), myVector.end(), rand); cout 生成的隨機序列為:; PrintVector(myVector); generate可以生成指定大小的隨機序列。(15)move()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片void MoveVector() int arr = 4, 6, 8, 2, 0; vector myVector(arr, arr + sizeof(arr) / sizeof(int); vector myVectorMove(10); / 初始值為0 move(myVector.begin(), myVector.end(), myVectorMove.begin() + 5); cout 移動后的序列為:; PrintVector(myVectorMove); 可以把序列向前或向后移動若干個位置,空位用0補。(16)fill()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片/* * vector的初始化可以用array,也可以直接用. */ void FillVector() vector myVector3, 4, 5, 6, 7; cout 初始的序列為:; PrintVector(myVector); / 數(shù)據(jù)全部填充為* fill(myVector.begin(), myVector.end(), 99); cout 填充后的序列為:; PrintVector(myVector); 可以把序列指定位置范圍內(nèi)的元素使用某個數(shù)字進行填充。(17)rotate()cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片/ rorate函數(shù)將first, middle)內(nèi)的元素和middle, last)內(nèi)的元素互換,middle所指元素成為容器的第一個元素。 void RotateVector() vector myVector4, 5, 0, 1, 9; cout 旋轉(zhuǎn)前的序列為:; PrintVector(myVector); rotate(myVector.begin(), myVector.begin() + 3, myVector.end(); cout 旋轉(zhuǎn)后的序列為:; PrintVector(myVector); 從序列的某個位置起進行翻轉(zhuǎn)。(18)關(guān)于堆的操作cpp view plain copy print?在CODE上查看代碼片派生到我的代碼片/ 關(guān)于堆的操作 void Heap() int arr = 3, 7, 9, 1, 0, 6; vector myVector(arr, arr + sizeof(arr) / si

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論