C++ stl vector

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
/*
c++ stl是非常好用c++封裝的官方庫 學會使用stl在寫代碼的時候非常有幫助
vector的基本用法
vector可以簡單理解爲是一個動態數組 這裏只介紹最簡單的用法 關於容量以及如何動態擴容暫時不講
vector基本用法 vector<int> v; int可以被任意替換 char string 或者自建的struct或class都可以
*/
vector<int> mp[10005];
int main()
{
    vector<int> v;
    v.push_back(1); //將元素按順序加入vector
    v.push_back(2);
    v.push_back(3);
    printf("%d", v.size()); //v.size()爲vector內部目前元素個數 當前爲3
    //vector的遍歷 vector遍歷方法有很多,個人覺得簡單的兩種
    for (int i = 0; i < v.size(); i++)
        printf("%d", v[i]); //該方法就把vector當正常的數組使用
    /*
    c++11使用的迭代器遍歷法,迭代器是stl容器比較重要的概念 只爲刷題也可以不瞭解可以簡單理解爲指針,比較重要的概念
    begin()爲初始第一個元素 end()表示最後一個元素之後的位置 例如下面的遍歷結束條件爲 it != v.end() 爲end()則直接跳過
    也可以利用這個性質套用到官方函數上 例如快排函數 假設數組元素是 a[0]~a[n-1]排序是 爲sort(a,a+n)
    因此 vector的快排爲 sort(v.begin(),v.end())
    */
    for (auto it = v.begin(); it != v.end(); it++)
        printf("%d", *it);
    v.clear(); //clear() 爲清空vector
    /*
    vector做題用到最多的地方是建圖 可以大大節省空間複雜度 可以非常簡單實現鄰接表的效果
    如果採用正常的數組 則實現鄰接矩陣 空間複雜度高 例如有10000個點,用數組則需要10000*10000的空間
    如果使用vector
    */
    //上面聲明瞭全局遍歷 vector<int> mp[10005]
    for (int i = 0; i < 100; i++)
    {
        int a = random(), b = random();
        mp[a].push_back(b);
        mp[b].push_back(a); //雙向邊則需要反向添加
    }
    //這樣就利用vector很簡單的實現了鄰接表的效果 mp[1] vector 裏所存的就是 與點1相連的所有點 比如利用這個實現簡單的dfs遍歷圖
    memset(vis, 0, sizeof(vis));
    dfs(1); //從點1出發dfs遍歷圖
}
bool vis[10005]; //標記某個點是否經過過 dfs遍歷前初始化
void dfs(int x)
{
    vis[x] = 1;
    printf("%d\n", x);
    for (int i = 0; i < mp[x].size(); i++) //遍歷這個點相連的所有點
    {
        if (vis[mp[x][i]] == true)
        {
            continue;
        }
        dfs(mp[x][i]);
    }
}

 

發佈了147 篇原創文章 · 獲贊 14 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章