1. 程式人生 > >cpp vector 實現二維陣列

cpp vector 實現二維陣列

簡介
在STL中Vector這一容器,無論是在封裝程度還是記憶體管理等方面都由於傳統C++中的陣列。本文主要是關於使用Vector初始化、遍歷方面的內容。其他二維的思想也是類似的。

這裡簡單敘述一下C++ 構建二維動態陣列

int **p;
p = new int*[10];    //注意,int*[10]表示一個有10個元素的指標陣列
for (int i = 0; i < 10; ++i)
{
    p[i] = new int[5];
}

1.初始化
(1)利用Vector的push_back函式

vector<vector<int>> vec;

vector<int
>
a; a.push_back(1); a.push_back(2); a.push_back(3); vector<int> b; b.push_back(4); b.push_back(5); b.push_back(6); vec.push_back(a); vec.push_back(b);

(2)先定義好二維陣列結構,在直接賦值

//得到一個5行3列的陣列
//由vector實現的二維陣列,可以通過resize()的形式改變行、列值
int i,j;
vector<vector<int>> array(5);
for (i = 0; i < array
.size(); i++) array[i].resize(3); for(i = 0; i < array.size(); i++) { for (j = 0; j < array[0].size();j++) { array[i][j] = (i+1)*(j+1); } }

2.遍歷
(1)利用迭代器

void reverse_with_iterator(vector<vector<int>> vec)
{
    if (vec.empty())
    {
        cout << "The vector is empty!"
<< endl; return; } vector<int>::iterator it; vector<vector<int>>::iterator iter; vector<int> vec_tmp; cout << "Use iterator : " << endl; for(iter = vec.begin(); iter != vec.end(); iter++) { vec_tmp = *iter; for(it = vec_tmp.begin(); it != vec_tmp.end(); it++) cout << *it << " "; cout << endl; } }

(2)得到行、列大小,利用下標進行遍歷

void reverse_with_index(vector<vector<int>> vec)
{
    if (vec.empty())
    {
        cout << "The vector is empty!" << endl;
        return;
    }

    int i,j;
    cout << "Use index : " << endl;
    for (i = 0; i < vec.size(); i++)
    {
        for(j = 0; j < vec[0].size(); j++)
            cout << vec[i][j] << " ";
        cout << endl;
    }
}