cpp vector 實現二維陣列
阿新 • • 發佈:2019-02-05
簡介
在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;
}
}