初探STL(vector,set,map)

這幾天在學習STL,可能有些地方講的不對,還請各位大佬指出錯誤,謝謝。

關於STL

STL是指C++的標準模板庫(Standard Template Library)
提供了通用的模板類和函數,這些模板類和函數可以實現多種流行和常用的算法和數據結構,如向量、鏈表、隊列、棧。
C++ 標準模板庫的核心包括以下三個組件:
容器(Containers) 容器是用來管理某一類對象的集合。C++ 提供了各種不同類型的容器,比如 deque、list、vector、map 等。
算法(Algorithms) 算法作用於容器。它們提供了執行各種操作的方式,包括對容器內容執行初始化、排序、搜索和轉換等操作。
迭代器(iterators) 迭代器用於遍歷對象集合的元素。這些集合可能是容器,也可能是容器的子集。

今天要分享的是STL組件中的容器,例如vector, map, set(),下面會有一些解釋和用法的介紹,還有相關例題。

1.不定長數組:Vector

vector是一個不定長數組,vector和數組具有同樣的內存處理方式。這裏需要和數組區分開來的是:數組是靜態空間,一旦分配了就不能被改變,因而空間的分配非常地不靈活;vector是動態空間,即空間可以被動態分配,因而空間的分配很靈活。可以說vector是相對數組的一種更高級的數據結構。vector是一個模板類,所以需要通過 vector a和vectorb這樣的方式來聲明一個vector。
{(PS:C語言中的動態存儲分配)
當程序結束後,它申請的內存空間會怎麼樣?}

下面介紹一些常用的操作:
假設a是一個vector,

  • a.size() : 可以獲取它的大小;
  • a.resize() : 可以改變它的大小;
  • a.push_back() :可以向尾部添加元素(類似Python列表操作 .append();
  • a.pop_back() : 可以刪除最後一個元素(類似Python列表操作 .pop();
  • a.empty() :可以測試vector是否爲空;

關於vector的一個用法,這裏也在lentcode找到一個比較簡單的題目
在這裏插入圖片描述
題目大概的意思是股票每天會跌漲,算出最大利潤,這道題和平常的題目不一樣的地方在於:它沒有給出具體的天數,因此無法通過直接循環來讀取數據。而正好,vector是不定長數組,可以由實際數據靈活地申請空間,.(PS:關於C++類瞭解不多,lentcode給的模板如下)

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        
    }
};

其中代碼中,在參數名之前加一個”&“符號,就表示這個參數按照傳引用的方式傳遞,是變量的”別名“,可在一定程度上代替C中的指針

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int sum=0,n=prices.size();
        for(int i=0;i<n-1;++i){
            if(prices[i] < prices[i+1])
                sum += prices[i+1] - prices[i];
        }
        return sum;
    }
};

2. 集合:set

set,其實類似於數學上的集合,而集合的性質之一———每個元素最多隻出現一次,但兩者的不同之處是:set的所有元素都是有序的。

3. 映射:map

map,從鍵(key)到值(value)的映射,就是類似於數學上的函數,例如y=x^2,即y值可以對應多個x值,而x只能對應一個y值。也類似於Python的字典。因爲重載了[]運算符,map像是數組的”高級版“,也稱爲”關聯數組“,舉個栗子:可以可以用一個map<string,int>mouth_name來表示”月份到月份編號“的映射,然後用mouth_name[“July”]=7這樣的方式來賦值。
在這裏插入圖片描述

- 關於重載
同一個標識符在不同的上下文有不同的意義。

- 關於set和map操作
兩者都支持以下操作:

  • insert(key_value):由下圖介紹可知,如果在set或者map裏面沒有與插入元素等價的元素,則將其插入到容器相應的位置,如果有,則不將元素插入容器,返回這個已經存在元素的迭代器(如果該函數返回的是一個值)
    在這裏插入圖片描述
  • find():返回值是一個迭代器,成功返回迭代器指向要查找的元素,失敗返回的迭代器指向end。在這裏插入圖片描述
  • count(key_value) :由下圖介紹可知,所有元素在容器裏都是唯一的,因而返回值只能是1(元素被找到)或者0(未找到元素),可以判斷鍵值元素是否存在。
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章