99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

C++入門之通用算法

jf_78858299 ? 來源:QStack ? 作者:月下西樓 ? 2023-05-17 09:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

std::sort()

std::sort() 是 C++ 中最常用的算法之一,它可以對容器中的元素進行排序。該算法使用快速排序算法實現(xiàn),時間復(fù)雜度為 O(n log n)。以下是一個使用 std::sort() 對數(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::sort(arr, arr + n);

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

    return 0;
}

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

std::find()

std::find() 可以在容器中查找指定的元素。該算法返回一個迭代器,指向第一個匹配的元素。如果沒有找到匹配的元素,則返回容器的 end() 迭代器。以下是一個使用 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() 可以計算容器中元素的總和。該算法需要兩個迭代器和一個初始值作為參數(shù)。以下是一個使用 std::accumulate() 計算數(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() 計算數(shù)組 arr 中元素的總和,并打印結(jié)果。

std::transform()

std::transform() 可以對容器中的元素進行轉(zhuǎn)換。該算法需要兩個迭代器和一個轉(zhuǎn)換函數(shù)作為參數(shù)。以下是一個使用 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ù)制到另一個容器中。該算法需要兩個迭代器和一個目標容器的迭代器作為參數(shù)。以下是一個使用 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)容器中的元素順序。該算法需要兩個迭代器作為參數(shù)。以下是一個使用 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ù)的元素。該算法需要兩個迭代器作為參數(shù),并返回一個迭代器,指向不重復(fù)的元素的末尾。以下是一個使用 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() 可以對容器中的每個元素執(zhí)行指定的操作。該算法需要兩個迭代器和一個函數(shù)對象作為參數(shù)。以下是一個使用 std::for_each() 對數(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::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() 對數(shù)組 arr 中的元素進行平方,并使用循環(huán)打印結(jié)果。

最后

C++ 的通用算法可以大大簡化編寫 C++ 程序的過程,因為它們提供了一種通用的方法來處理容器中的元素,而不需要編寫特定于容器類型的代碼。此外,這些算法已經(jīng)經(jīng)過優(yōu)化,因此它們通常比手動編寫的代碼更快、更可靠。在實際編程中,我們應(yīng)該熟練掌握這些算法,并根據(jù)需要選擇合適的算法來處理容器中的元素。

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

    關(guān)注

    10

    文章

    1956

    瀏覽量

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

    關(guān)注

    0

    文章

    511

    瀏覽量

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

    關(guān)注

    22

    文章

    2119

    瀏覽量

    75349
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    C++STL算法(二)

    C++STL算法(二)
    的頭像 發(fā)表于 07-18 14:49 ?1847次閱讀
    <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 ?2128次閱讀
    <b class='flag-5'>c++</b><b class='flag-5'>之</b>STL<b class='flag-5'>算法</b>(三)

    C++文件操作

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

    c++算法庫的移植問題

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

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

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

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

    C++數(shù)值算法電子書在每個專題中,不僅對每種算法給出了數(shù)學(xué)分析和比較,而且根據(jù)作者的經(jī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é)教程從入門知識開始講起,比較有利于初學(xué)者入門掌握,比較好懂,能夠?qū)?b class='flag-5'>C++有一個全面認識
    發(fā)表于 11-17 10:36 ?0次下載

    Visual C++編程入門視頻

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

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

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

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

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

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

    本文檔的主要內(nèi)容詳細介紹的是C++入門教程之C++程序設(shè)計的課件資料免費下載主要內(nèi)容包括了:1. 認識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è)計的課件資料免費下載

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

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

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

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

    C++入門string

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

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

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