精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

C++入門之通用算法

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

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

std::sort()

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

#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() 對數組 arr 進行排序,并使用循環打印排序后的結果。

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,并打印結果。

std::accumulate()

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

#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() 計算數組 arr 中元素的總和,并打印結果。

std::transform()

std::transform() 可以對容器中的元素進行轉換。該算法需要兩個迭代器和一個轉換函數作為參數。以下是一個使用 std::transform() 將數組中的元素乘以 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() 將數組 arr 中的元素乘以 2,并使用循環打印結果。

std::copy()

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

#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() 將數組 arr 中的元素復制到向量 vec 中,并使用循環打印結果。

std::reverse()

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

#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() 反轉數組 arr 中的元素順序,并使用循環打印結果。

std::unique()

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

#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 中的重復元素,并使用循環打印結果。

std::for_each()

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

#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() 對數組 arr 中的元素進行平方,并使用循環打印結果。

最后

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程語言
    +關注

    關注

    10

    文章

    1938

    瀏覽量

    34593
  • 容器
    +關注

    關注

    0

    文章

    494

    瀏覽量

    22044
  • C++
    C++
    +關注

    關注

    22

    文章

    2104

    瀏覽量

    73487
收藏 人收藏

    評論

    相關推薦

    C++STL算法(二)

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

    c++STL算法(三)

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

    C++文件操作

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

    c++算法庫的移植問題

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

    C++入門基礎教程大全

    C++入門基礎教程大全 C++是一種面向對象的編程語言,但如果系統沒有采用面向對象的技術,C++只能作為面向過程的語言來使用.
    發表于 05-29 10:25 ?0次下載

    C++數值算法電子書

    C++數值算法電子書在每個專題中,不僅對每種算法給出了數學分析和比較,而且根據作者的經驗給出了評論和建議,并在此基礎上給出了 C++ 編程的具體程序,很適合廣大電子愛好的學
    發表于 07-15 17:46 ?0次下載
    <b class='flag-5'>C++</b>數值<b class='flag-5'>算法</b>電子書

    C++ 入門自學教程

    C++ 入門自學教程從入門知識開始講起,比較有利于初學者入門掌握,比較好懂,能夠對C++有一個全面認識
    發表于 11-17 10:36 ?0次下載

    Visual C++編程入門視頻

    Visual C++編程入門視頻!資料來源網絡,如有侵權,敬請見諒
    發表于 11-20 15:10 ?6次下載

    c++入門經典習題集

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

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

    C++是在C語言基礎上開發的一種集面向對象編程、通用編程和傳統的過程化編程于一體的編程語言,是C語言的超集。本書是根據2003年的ISO/ANSI
    發表于 09-11 08:00 ?0次下載

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

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

    C++設計新思維-泛型編程與設計應用

    C++設計新思維-泛型編程與設計應用
    發表于 11-16 15:59 ?3次下載

    C++學習筆記c++的基本認識

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

    C++入門string

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

    C++之父新作帶你勾勒現代C++地圖

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