RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++入門之通用算法

jf_78858299 ? 來(lái)源:QStack ? 作者:月下西樓 ? 2023-05-17 09:40 ? 次閱讀

C++ 是一種強(qiáng)大的編程語(yǔ)言,它提供了許多通用算法,可以用于各種容器類型。這些算法是通過迭代器來(lái)操作容器中的元素,因此它們是通用的,可以用于不同類型的容器。在本篇博客中,我們將詳細(xì)介紹 C++ 的通用算法。

std::sort()

std::sort() 是 C++ 中最常用的算法之一,它可以對(duì)容器中的元素進(jìn)行排序。該算法使用快速排序算法實(shí)現(xiàn),時(shí)間復(fù)雜度為 O(n log n)。以下是一個(gè)使用 std::sort() 對(duì)數(shù)組進(jìn)行排序的示例:

#include 
#include 

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    std::sort(arr, arr + n);

    for (int i = 0; i < n; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在上面的示例中,我們使用 std::sort() 對(duì)數(shù)組 arr 進(jìn)行排序,并使用循環(huán)打印排序后的結(jié)果。

std::find()

std::find() 可以在容器中查找指定的元素。該算法返回一個(gè)迭代器,指向第一個(gè)匹配的元素。如果沒有找到匹配的元素,則返回容器的 end() 迭代器。以下是一個(gè)使用 std::find() 查找向量中的元素的示例:

#include 
#include 
#include 

int main() {
    std::vector<int> vec = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int x = 5;

    auto it = std::find(vec.begin(), vec.end(), x);

    if (it != vec.end()) {
        std::cout << "Found " << x << " at position " << it - vec.begin() << std::endl;
    } else {
        std::cout << "Not found" << std::endl;
    }

    return 0;
}

在上面的示例中,我們使用 std::find() 在向量 vec 中查找元素 x,并打印結(jié)果。

std::accumulate()

std::accumulate() 可以計(jì)算容器中元素的總和。該算法需要兩個(gè)迭代器和一個(gè)初始值作為參數(shù)。以下是一個(gè)使用 std::accumulate() 計(jì)算數(shù)組元素總和的示例:

#include 
#include 

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    int sum = std::accumulate(arr, arr + n, 0);

    std::cout << "Sum: " << sum << std::endl;

    return 0;
}

在上面的示例中,我們使用 std::accumulate() 計(jì)算數(shù)組 arr 中元素的總和,并打印結(jié)果。

std::transform()

std::transform() 可以對(duì)容器中的元素進(jìn)行轉(zhuǎn)換。該算法需要兩個(gè)迭代器和一個(gè)轉(zhuǎn)換函數(shù)作為參數(shù)。以下是一個(gè)使用 std::transform() 將數(shù)組中的元素乘以 2 的示例:

#include 
#include 

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    std::transform(arr, arr + n, arr, [](int x) { return x * 2; });

    for (int i = 0; i < n; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在上面的示例中,我們使用 std::transform() 將數(shù)組 arr 中的元素乘以 2,并使用循環(huán)打印結(jié)果。

std::copy()

std::copy() 可以將容器中的元素復(fù)制到另一個(gè)容器中。該算法需要兩個(gè)迭代器和一個(gè)目標(biāo)容器的迭代器作為參數(shù)。以下是一個(gè)使用 std::copy() 將數(shù)組中的元素復(fù)制到向量中的示例:

#include 
#include 
#include 

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    std::vector<int> vec(n);
    std::copy(arr, arr + n, vec.begin());

    for (int i = 0; i < n; i++) {
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在上面的示例中,我們使用 std::copy() 將數(shù)組 arr 中的元素復(fù)制到向量 vec 中,并使用循環(huán)打印結(jié)果。

std::reverse()

std::reverse() 可以反轉(zhuǎn)容器中的元素順序。該算法需要兩個(gè)迭代器作為參數(shù)。以下是一個(gè)使用 std::reverse() 反轉(zhuǎn)數(shù)組中的元素順序的示例:

#include 
#include 

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    std::reverse(arr, arr + n);

    for (int i = 0; i < n; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在上面的示例中,我們使用 std::reverse() 反轉(zhuǎn)數(shù)組 arr 中的元素順序,并使用循環(huán)打印結(jié)果。

std::unique()

std::unique() 可以從容器中刪除重復(fù)的元素。該算法需要兩個(gè)迭代器作為參數(shù),并返回一個(gè)迭代器,指向不重復(fù)的元素的末尾。以下是一個(gè)使用 std::unique() 刪除向量中重復(fù)元素的示例:

#include 
#include 
#include 

int main() {
    std::vector<int> vec = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    std::sort(vec.begin(), vec.end());

    auto it = std::unique(vec.begin(), vec.end());
    vec.erase(it, vec.end());

    for (int i = 0; i < vec.size(); i++) {
        std::cout << vec[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在上面的示例中,我們使用 std::unique() 刪除向量 vec 中的重復(fù)元素,并使用循環(huán)打印結(jié)果。

std::for_each()

std::for_each() 可以對(duì)容器中的每個(gè)元素執(zhí)行指定的操作。該算法需要兩個(gè)迭代器和一個(gè)函數(shù)對(duì)象作為參數(shù)。以下是一個(gè)使用 std::for_each() 對(duì)數(shù)組中的元素進(jìn)行平方的示例:

#include 
#include 

int main() {
    int arr[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    std::for_each(arr, arr + n, [](int& x) { x *= x; });

    for (int i = 0; i < n; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

在上面的示例中,我們使用 std::for_each() 對(duì)數(shù)組 arr 中的元素進(jìn)行平方,并使用循環(huán)打印結(jié)果。

最后

C++ 的通用算法可以大大簡(jiǎn)化編寫 C++ 程序的過程,因?yàn)樗鼈兲峁┝艘环N通用的方法來(lái)處理容器中的元素,而不需要編寫特定于容器類型的代碼。此外,這些算法已經(jīng)經(jīng)過優(yōu)化,因此它們通常比手動(dòng)編寫的代碼更快、更可靠。在實(shí)際編程中,我們應(yīng)該熟練掌握這些算法,并根據(jù)需要選擇合適的算法來(lái)處理容器中的元素。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程語(yǔ)言
    +關(guān)注

    關(guān)注

    10

    文章

    1942

    瀏覽量

    34706
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    495

    瀏覽量

    22060
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73618
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C++STL算法(二)

    C++STL算法(二)
    的頭像 發(fā)表于 07-18 14:49 ?1034次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>STL<b class='flag-5'>算法</b>(二)

    c++STL算法(三)

    c++STL算法(三)
    的頭像 發(fā)表于 07-18 15:00 ?1278次閱讀
    <b class='flag-5'>c++</b><b class='flag-5'>之</b>STL<b class='flag-5'>算法</b>(三)

    C++文件操作

    C++文件操作
    的頭像 發(fā)表于 07-21 10:52 ?1108次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>文件操作

    c++算法庫(kù)的移植問題

    目前有一個(gè)算法庫(kù) 用的c++ ?用ccs在dsp上可以調(diào)試 現(xiàn)在希望把庫(kù)放在8168的dsp上 ?需要將c++轉(zhuǎn)換成c 有個(gè)工具 mmCC C++-
    發(fā)表于 06-21 13:14

    C++入門基礎(chǔ)教程大全

    C++入門基礎(chǔ)教程大全 C++是一種面向?qū)ο蟮木幊陶Z(yǔ)言,但如果系統(tǒng)沒有采用面向?qū)ο蟮募夹g(shù),C++只能作為面向過程的語(yǔ)言來(lái)使用.
    發(fā)表于 05-29 10:25 ?0次下載

    C++數(shù)值算法電子書

    C++數(shù)值算法電子書在每個(gè)專題中,不僅對(duì)每種算法給出了數(shù)學(xué)分析和比較,而且根據(jù)作者的經(jīng)驗(yàn)給出了評(píng)論和建議,并在此基礎(chǔ)上給出了 C++ 編程的具體程序,很適合廣大電子愛好的學(xué)
    發(fā)表于 07-15 17:46 ?0次下載
    <b class='flag-5'>C++</b>數(shù)值<b class='flag-5'>算法</b>電子書

    C++ 入門自學(xué)教程

    C++ 入門自學(xué)教程從入門知識(shí)開始講起,比較有利于初學(xué)者入門掌握,比較好懂,能夠?qū)?b class='flag-5'>C++有一個(gè)全面認(rèn)識(shí)
    發(fā)表于 11-17 10:36 ?0次下載

    Visual C++編程入門視頻

    Visual C++編程入門視頻!資料來(lái)源網(wǎng)絡(luò),如有侵權(quán),敬請(qǐng)見諒
    發(fā)表于 11-20 15:10 ?6次下載

    c++入門經(jīng)典習(xí)題集

    讓大家全方位傻瓜式學(xué)習(xí)大話設(shè)計(jì)模式(3.45MB)c++入門經(jīng)典習(xí)題集+多年積累的類庫(kù)。
    發(fā)表于 07-13 15:11 ?2次下載

    c++入門教程書籍c++PrimerPlus》第六版電子教材免費(fèi)下載

    C++是在C語(yǔ)言基礎(chǔ)上開發(fā)的一種集面向?qū)ο缶幊獭?b class='flag-5'>通用編程和傳統(tǒng)的過程化編程于一體的編程語(yǔ)言,是C語(yǔ)言的超集。本書是根據(jù)2003年的ISO/ANSI
    發(fā)表于 09-11 08:00 ?0次下載

    C++入門教程之C++程序設(shè)計(jì)的課件資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C++入門教程之C++程序設(shè)計(jì)的課件資料免費(fèi)下載主要內(nèi)容包括了:1. 認(rèn)識(shí)C++2. C++的現(xiàn)狀和發(fā)展3.
    發(fā)表于 12-07 08:00 ?33次下載
    <b class='flag-5'>C++</b><b class='flag-5'>入門</b>教程之<b class='flag-5'>C++</b>程序設(shè)計(jì)的課件資料免費(fèi)下載

    C++設(shè)計(jì)新思維-泛型編程與設(shè)計(jì)應(yīng)用

    C++設(shè)計(jì)新思維-泛型編程與設(shè)計(jì)應(yīng)用
    發(fā)表于 11-16 15:59 ?3次下載

    C++學(xué)習(xí)筆記c++的基本認(rèn)識(shí)

    自這篇文章我們即將開始C++的奇幻之旅,其內(nèi)容主要是讀C++ Primer的總結(jié)和筆記,有興趣可以找原版書看看,對(duì)于學(xué)習(xí)C++還是有很大幫助的。這篇文章將從一個(gè)經(jīng)典的程序開始介紹C++
    的頭像 發(fā)表于 03-17 13:57 ?726次閱讀

    C++入門string

    前一篇文章我們已經(jīng)了解了C++中的基本類型,C++還提供了很多抽象數(shù)據(jù)類型,例如字符串string,string包含多個(gè)字符,以及可變長(zhǎng)度的vector,vector可以包含多個(gè)同一類型的對(duì)象
    的頭像 發(fā)表于 03-17 13:58 ?559次閱讀

    C++之父新作帶你勾勒現(xiàn)代C++地圖

    為了幫助大家解決這些痛點(diǎn)問題,讓大家領(lǐng)略現(xiàn)代C++美,掌握其中的精髓,更好地使用C++,C++之父Bjarne Stroustrup坐不住了,他親自操刀寫就了這本《
    的頭像 發(fā)表于 10-30 16:35 ?838次閱讀
    <b class='flag-5'>C++</b>之父新作帶你勾勒現(xiàn)代<b class='flag-5'>C++</b>地圖
    RM新时代网站-首页