vector<vector<int>> 二维向量 疑问:链表嵌套??
今天笔试的时候浪费了很长时间在一个很小的知识点上,导致笔试有一道题没有AC,非常气愤!引以为戒~
二维向量的输入问题:
不像二维数组那样,可以直接对arr[i][j]进行循环赋值。在vector<vector<int>>中,因为vector是一个容器,最外层的vector容器中放着更小的vector,而里层的vector里面放的是int型的数字。所以我们首先要对里层的vector容器赋值,然后再把里层的vector作为元素插入到外层的vector中。代码如下:
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 int main() 7 { 8 vector<vector<int>> test; 9 vector<int> v; 10 int n,temp; 11 12 cin >> n; 13 test.clear(); 14 15 //输入 16 for (int i = 0; i<n; i++) { 17 v.clear(); //每次记得clear:) 18 for (int j = 0; j < n; j++) 19 { 20 cin >> temp; 21 v.push_back(temp); 22 } 23 test.push_back(v); 24 } 25 26 //输出 27 for(int i = 0; i < n; i++) 28 { 29 for(int j = 0;j < n; j++) 30 { 31 cout << test[i][j] << " "; 32 } 33 cout << endl; 34 } 35 return 0; 36 }
[转载] http://bbs.csdn.net/topics/10278514
vector本来就是可以用来代替一维数组的,vector提供了operator[]函数,可以像数组一样的操作,而且还有边界检查,动态改变大小。
这里只介绍用它来代替二维的数组,二维以上的可以依此类推。。
1、定义二维vector
C++的template参数是可以嵌套定义的,你可以这样定义一个模板的Instance
vector<vector<int> > array2(3);//注意>和>之间的空格。
array2可以保存3个向量,向量的长度是可以改变的。array2[i]返回的是第i个向量。同理,array2[i][j]返回的是第i个向量中的第j个元素。
2、访问二维vector的元素
下边没有指定向量的大小,也没有去初始化,就访问,程序会segement failed。
vector<vector<int> > array2(3);
array2[1][2]=9;
可用push_back函数可以解决问题:
array2[1].push_back(9);
- 1
只要提前设定好每行vector的大小,就可用operator[]访问,如下:
for(int i=0;i<3;i++)
array2[i].resize(3);
- 1
- 2
现在,你就定义了一个3X3的数组了(另一个3是在声明时定义的)。而且你可以随时改变它的大小。
2、访问二维vector的元素
下面提供一个范例,供参考。
//在VC下会有变量定义问题,大家自己解决
浙公网安备 33010602011771号