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下会有变量定义问题,大家自己解决

posted @ 2018-04-21 21:18  月夜_1  阅读(1647)  评论(0)    收藏  举报