C++ 演算法
C++ 演算法
在前面的章節中,您瞭解到資料結構(如 vectors、lists 等)用於儲存和組織資料。
演算法用於透過排序、搜尋和操作資料結構來解決問題。
<algorithm>
庫提供了許多有用的函式,可使用 迭代器 來執行這些任務。
要使用這些函式,您必須包含 <algorithm>
標頭檔案
// 包含演算法庫
#include <algorithm>
排序演算法
要對資料結構中的元素進行排序,可以使用 sort()
函式。
sort()
函式接受 迭代器(通常是 begin()
返回的開始迭代器和 end()
返回的結束迭代器)作為引數
示例
// 建立一個名為 cars 的 vector,用於儲存字串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 按字母順序對汽車進行排序
sort(cars.begin(), cars.end());
自己動手試一試 »
預設情況下,元素按升序排序。在上面的示例中,由於元素是字串,因此它們是按字母順序排序的。
如果我們有一個整數向量,它們將按數值順序排序
示例
// 建立一個名為 numbers 的向量,它將儲存整數
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 按數值順序對數字進行排序
sort(numbers.begin(), numbers.end());
自己動手試一試 »
要反轉順序,可以使用 rbegin()
和 rend()
代替 begin()
和 end()
示例
// 建立一個名為 numbers 的向量,它將儲存整數
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 按數值順序反向排序數字
sort(numbers.rbegin(), numbers.rend());
自己動手試一試 »
要僅對特定元素進行排序,可以這樣做:
示例
// 建立一個名為 numbers 的向量,它將儲存整數
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 按數值順序對數字進行排序,從第四個元素開始(僅排序 5、9 和 2)
sort(numbers.begin() + 3, numbers.end());
自己動手試一試 »
搜尋演算法
要搜尋向量中的特定元素,可以使用 find()
函式。
它接受三個引數:start_iterator, end_iterator, value
,其中 value 是要搜尋的值
示例
在 "numbers" 中搜索數字 3
// 建立一個名為 numbers 的向量,它將儲存整數
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 搜尋數字 3
auto it = find(numbers.begin(), numbers.end(), 3);
自己動手試一試 »
要查詢大於特定值的第一個元素,可以使用 upper_bound()
函式
示例
在 "numbers" 中查詢大於 5 的第一個值
// 建立一個名為 numbers 的向量,它將儲存整數
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 按升序對向量進行排序
sort(numbers.begin(), numbers.end());
// 在排序後的向量中查詢大於 5 的第一個值
auto it = upper_bound(numbers.begin(), numbers.end(), 5);
自己動手試一試 »
upper_bound()
函式通常用於已排序的資料結構。這就是為什麼我們在上面的示例中首先對向量進行排序的原因。
要查詢向量中的最小元素,請使用 min_element()
函式
示例
// 建立一個名為 numbers 的向量,它將儲存整數
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 查詢最小的數字
auto it = min_element(numbers.begin(), numbers.end());
自己動手試一試 »
要查詢最大的元素,請使用 max_element()
函式
示例
// 建立一個名為 numbers 的向量,它將儲存整數
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 查詢最大的數字
auto it = max_element(numbers.begin(), numbers.end());
自己動手試一試 »
修改演算法
要將元素從一個向量複製到另一個向量,可以使用 copy()
函式
示例
將元素從一個向量複製到另一個向量
// 建立一個名為 numbers 的向量,它將儲存整數
vector<int> numbers = {1, 7, 3, 5, 9, 2};
// 建立一個名為 copiedNumbers 的向量,它應該儲存 6 個整數
vector<int> copiedNumbers(6);
// 將 elements 從 numbers 複製到 copiedNumbers
copy(numbers.begin(), numbers.end(), copiedNumbers.begin());
自己動手試一試 »
要用某個值填充向量中的所有元素,可以使用 fill()
函式
示例
將 numbers 向量中的所有元素填充為值 35
// 建立一個名為 numbers 的向量,它將儲存 6 個整數
vector<int> numbers(6);
// 將 numbers 向量中的所有元素填充為值 35
fill(numbers.begin(), numbers.end(), 35);
自己動手試一試 »
完整的演算法參考
有關演算法函式的完整參考,請訪問我們的 C++ 演算法參考。