關於C++中二維和多維vector, deque, array的表示


目錄

vector

deque

array

多維的vector

前言

像 vector, deque, array 這種類數組的容器, 其存儲的思想和C語言中的普通數的組存儲思想差不多, 本質上可以看作是指針的多級嵌套. 例如一個三級指針指向一個二級指針, 一個二維指針指向一個一維指針, 一個一維指針指向一個變量.... 下面是一個多級指針嵌套的例子

#include <iostream>
#include <array>
#include <vector>
#include <deque>

using namespace std;

int main(void)
{
    int ***p = nullptr;
    int **o = nullptr;
    int *i = nullptr;
    int variable = 1;

    i = &variable;
    o = &i;
    p = &o;

    cout << ***p << endl;

    system("pause");

    return 0;
}

輸出結果:

1

關於多級指針的相關概念可看 : http://c.biancheng.net/view/225.html 理解了多級指針就能理解多維順序容器和數組了

vector

vector的二維表示 :

二維 vector 可以看作是一個存儲元素的類型為 vector 的 vector . 下面是一個二維 vector 的例子

#include <iostream>
#include <array>
#include <vector>
#include <deque>

using namespace std;

int main(void)
{
    vector<vector<int> > vi;

    return 0;
}

二維 vector 的初始化

#include <iostream>
#include <array>
#include <vector>
#include <deque>

using namespace std;

int main(void)
{
    vector<vector<int>> vi
    {
        vector<int>{1, 2, 3, 4, 5},
        vector<int>{6, 7, 8, 9, 10},
        vector<int>{11, 12, 13, 14, 15}
    };

    return 0;
}

這種初始化形式就很像 C語言多維數組的那種初始化了. 這個 vector 中每個元素都為 vector<vector> 類型, 而每個子 vector 中的每個元素都為 int 類型.

二維 vector 的插入

看如下的代碼, 如何向一個空的 vector 插入元素

#include <iostream>
#include <array>
#include <vector>
#include <deque>

using namespace std;

int main(void)
{
    vector<vector<int>> vi;
    int Val;

    /*向一維vector中插入元素, 每個元素都為空 vector*/

    vi.push_back(vector<int>{});
    vi.push_back(vector<int>{});
    vi.push_back(vector<int>{});

    /*現在向每個空 vector 插入元素*/

    Val = 1;

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            vi[i].push_back(Val);
            Val++;
        }
    }

    /*輸出元素*/

    for (auto i : vi)
        for (auto j : i)
            cout << j << ' ';

    cout << endl;

    return 0;
}

輸出結果 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

這里要注意的是, 最后的輸出, 第一層 for 中的 i 實際是指向 vector<int> 類型的元素, 而第二層才是真正輸出 vector<int> 中的元素, 即 int 變量

刪除和插入類似, 就不細說了

deque

二維 deque 和 vector 差不多, 甚至可以說類似的順序容器都差不多

初始化

#include <iostream>
#include <array>
#include <vector>
#include <deque>

using namespace std;

int main(void)
{
    deque<deque<int>> Q
    {
        deque<int>{1, 2, 3, 4, 5},
        deque<int>{6, 7, 8, 9, 10},
        deque<int>{11, 12, 13, 14, 15}
    };

    return 0;
}

插入

#include <iostream>
#include <array>
#include <vector>
#include <deque>

using namespace std;

int main(void)
{
    deque<deque<int>> vi;
    int Val;

    /*向一維deque中插入元素, 每個元素都為空 deque*/

    vi.push_back(deque<int>{});
    vi.push_back(deque<int>{});
    vi.push_back(deque<int>{});

    /*現在向每個空 deque 插入元素*/

    Val = 1;

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            vi[i].push_back(Val);
            Val++;
        }
    }

    /*輸出*/

    for (auto i : vi)
        for (auto j : i)
            cout << j << ' ';

    cout << endl;

    return 0;
}

輸出 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

array

初始化

#include <iostream>
#include <array>
#include <vector>
#include <deque>

using namespace std;

int main(void)
{
    array<array<int, 2>, 5> A
    {
        array<int, 2>{1, 2},
        array<int, 2>{3, 4},
        array<int, 2>{5, 6},
        array<int, 2>{7, 8},
        array<int, 2>{9, 10}
    };

    return 0;
}

由於 array 的大小不能更改, 所以只能為 array 中的元素賦值

為 二維array 中的每個元素賦值

#include <iostream>
#include <array>
#include <vector>
#include <deque>

using namespace std;

int main(void)
{
    array<array<int, 2>, 5> A;

    int Num = 1;

    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            A[i][j] = Num;
            Num++;
        }
    }

    for (auto i : A)
        for (auto j : i)
            cout << j << ' ';

    cout << endl;

    return 0;
}

輸出

1 2 3 4 5 6 7 8 9 10


多維的 vector

了解了二維的 vector 就可以理解多維的 vector 了, 下面是一個五維的 vector 初始化的例子 ( 是不是看起來像個倒着的瑪雅金字塔? )

#include <iostream>
#include <array>
#include <vector>
#include <deque>

using namespace std;

int main(void)
{
    vector<vector<vector<vector<vector<int>>>>> vi
    {
        vector<vector<vector<vector<int>>>>
        {
            vector<vector<vector<int>>>
            {
                vector<vector<int>>
                {
                    vector<int>{1, 2, 3, 4, 5},
                    vector<int>{6, 7, 8, 9, 10},
                    vector<int>{11, 12, 13, 14, 15}

                }
            }

        }
    };

    return 0;
}

五維數組的插入

#include <iostream>
#include <array>
#include <vector>
#include <deque>

using namespace std;

int main(void)
{
    vector<vector<vector<vector<vector<int>>>>> vi;
    int Val = 1;

    vi.push_back(vector<vector<vector<vector<int>>>>{});
    vi[0].push_back(vector<vector<vector<int>>>{});
    vi[0][0].push_back(vector<vector<int>>{});
    vi[0][0][0].push_back(vector<int>{});
    vi[0][0][0].push_back(vector<int>{});
    vi[0][0][0].push_back(vector<int>{});

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            vi[0][0][0][i].push_back(Val);
            Val++;
        }
    }

    for (auto A : vi)
        for (auto B : A)
            for (auto C : B)
                for (auto D : C)
                    for (auto E : D)
                        cout << E << ' ';

    cout << endl;

    return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM