STL學習筆記-->初識STL

来源:http://www.cnblogs.com/shouce/archive/2016/04/25/5429271.html
-Advertisement-
Play Games

“這裡要用char類型”; “這裡要用int類型”; “其實實現這個方法只需要把另一個方法的返回值的類型和傳入參數的類型改成float類型就實現了”; “其實這個演算法只需要把以前寫的那個稍微改動一下就行了”; ……………… 學過面向對象語言的都知道GP這個概念,就是泛型程式設計,說的再明白點就是編寫 ...


“這裡要用char類型”;

“這裡要用int類型”;

“其實實現這個方法只需要把另一個方法的返回值的類型和傳入參數的類型改成float類型就實現了”;

“其實這個演算法只需要把以前寫的那個稍微改動一下就行了”;

………………

學過面向對象語言的都知道GP這個概念,就是泛型程式設計,說的再明白點就是編寫不依賴於具體數據類型的程式,C++作為一門面向對象語言,當然也有泛型這個概念,這就不得不提STL(Standard Template Library,標準模板庫),是被融入C++標準程式庫裡面的一個高效的庫,對於更深入學習C++瞭解和學習STL是很必要的!

本人雖然有修C++的課程,但是學的...  

接下來的時間我會把我的學習筆記和大家分享,不喜勿噴! (主要是為了加深理解和記憶)

個人覺得先從整體上瞭解一下是很有必要的:

STL主要包含容器、演算法、迭代器三大核心部分:

 

1. STL容器包含了絕大多數數據結構,如數組、鏈表、字元串、隊列、堆棧、樹等;

簡單的說就是一種存儲有限個某類型數據元素的集合,每種類型都是一個數據結構.

常用的容器和容器適配器對應的頭文件

容器類別

數據結構(容器類)

實現頭文件

序列式容器

向量(vector)

<vector>

雙向隊列(deque)

<deque>

雙向鏈表(list)

<list>

關聯式容器

集合(set)、多重集合(multiset)

<set>

映射(map)、多重映射(multimap)

<map>

容器適配器

棧(stack)

<stack>

隊列(queue)、優先順序隊列(priority_queue)

<queue>

 

 

2.STL演算法包含了諸如增、刪、改、查、排序等系統(全局)函數模板。這些演算法都是泛型演算法,同一個演算法可以適用於任意類型的容器;

STL中的演算法分別被組織在頭文件<algorithm>,<numeric>和<functional>中,STL提供了大約70多個已經實現了的演算法的函數模板,懂得了後只需要簡單的調用演算法模板就可以實現某些演算法功能.

 

3.STL 迭代器類似指針一樣,通過它的有序移動,把容器中的元素與演算法關聯起來,它是實現所有STL功能的基礎所在。

“容器負責存儲數據元素,演算法負責加工處理數據元素,那麼是誰負責將數據元素從容器里提取出來交給演算法去處理呢?又是誰負責將演算法處理過的數據元素寫入容器呢?這項任務由迭代器負責完成。迭代器將容器與演算法耦合起來,通過迭代器可以對容器內任意位置上的元素進行定位和存取(access)。”

 

三者之間的關係:

容器負責存儲數據元素,演算法負責處理數據元素。而迭代器則負責從容器中存取一個個數據元素提交給演算法去進行處理,或者將演算法處理完的數據元素放入容器。因此,迭代器將演算法和容器連在一起.

 

先貼一個簡單的程式吧:

複製代碼
#include <iostream>    
#include <vector>      //向量頭文件
#include <iterator>     //迭代器頭文件
#include <algorithm>   //演算法頭文件
#include <functional>  //函數對象(仿函數)頭文件
using namespace std;  //導入命名空間std
void main()
{
        const int N = 5;
        vector<int> s(N);  //定義一個含有5個int類型數據元素的向量容器對象s
      vector<int>::iterator pos; //聲明一個向量迭代器pos,該向量元素為int型
       for (int i = 0; i < N; ++i)
                      cin >> s[i];   //從鍵盤依次輸入整數5、-3、1、0和8
                                   //顯然,向量容器可以隨機訪問
       cout<<"從鍵盤輸入的5個整數是:"<<endl; 
        for (pos = s.begin(); pos != s.end(); pos++)
            cout << *pos <<",  ";   //通過迭代器pos訪問向量容器的元素
       cout<<endl;
        cout<<"輸入的5個數的相反數是:"<<endl; 
        transform(s.begin(), s.end(),ostream_iterator<int>(cout, ",   "), negate<int>());
        cout << endl;
}
複製代碼  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在騷擾了PayPal的技術支持好幾天之後終於成功對接了PayPal支付,非常感謝PayPal的技術支持人員,沒有她估計一周都搞不定。記錄一下這個過程。 接到這個任務聯繫了PayPal的技術之後,第一件事就是向她要了一些文檔。PayPal提供了一個demo商店https://demo.paypal.c ...
  • 前言:當我們進行大的項目書寫的時候或者我們選擇維護程式的時候,想知道幾點幾時我們錄入的數據有bug是那麼我們就採用 》log4j記錄日誌的信息 一、日誌及其分類 1、軟體運行的過程中離不開日誌。日誌主要用來記錄系統運行過程中的一些重要操作信息,便於監視系統運行的情況,幫助用戶避免和發現可能出現的問題 ...
  • 1、接收用戶輸入: input:接收用戶輸入的是合法的python表達式,比如字元串。 raw_input:把所有的輸入當做原始數據(raw data)。 除非對input有特別的需要,否則儘可能使用raw_input函數。 2、長字元串和原始字元串 長字元串常利用'\'經行轉義,例如: 這句話會打 ...
  • 原文地址:http://blog.csdn.net/morewindows/article/details/7421759 使用多線程其實是非常容易的,下麵這個程式的主線程會創建了一個子線程並等待其運行完畢,子線程就輸出它的線程ID號然後輸出一句經典名言——Hello World。整個程式的代碼非常 ...
  • 概述 Java語言中,提供了一套數據集合框架,其中定義了一些諸如List、Set等抽象數據類型,每個抽象數據類型的各個具體實現,底層又採用了不同的實現方式,比如ArrayList和LinkedList。 除此之外,Java對於數據集合的遍歷,也提供了幾種不同的方式。開發人員必須要清楚的明白每一種遍歷 ...
  • 程式中需USE COMOBJ單元 1.Q:如何得到機器上IIS中所有的WEB虛擬站點. A: var InstallPath: String; WebSite, WebServer, WebRoot: Variant; count: Integer; Flag: Boolean; begin Fla ...
  • 本文目的 PHP的全局錯誤處理,在開發項目的時候很有用,可以幫助開發者快速定位一些問題,提高工作效率。預設情況下,全局錯誤會直接輸出,但是最近開發時使用的一個框架庫對全局錯誤處理進行了設定,導致很多錯誤信息沒有輸出,在定位問題上有一定的耗時。所以,研究了一下此庫的實現,發現它設定了error_rep ...
  • 什麼是Queue集合? 答:Queue用於模擬隊列這種數據結構。隊列通常是指“先進先出(FIFO)”的容器。隊列的頭部保存在隊列中存放時間最長的元素,尾部保存存放時間最短的元素。新元素插入到隊列的尾部,取出元素會返回隊列頭部的元素。通常,隊列不允許隨機訪問隊列中的元素。 Queue介面中定義瞭如下的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...