zoukankan      html  css  js  c++  java
  • 二维vector的使用

        和数组一样,数组有二维的数组,vector也有二维的vector。下面就介绍一下二维vector的使用方法。

        一般声明初始化二维vector有三种方法

        (1) vector< vector<int> > v(n,vector<int>(m));   //在声明的时候就一次性指定vector内外层的大小;特别注意 > >之间是有空格的

             上面语句构造了一个二维向量,它有n个元素,每个元素都是含有m个int型元素的一维向量;并且二维向量中每行的长度都是相等的(每行元素个数相同)

        (2) 上面介绍的方法是一次性指定了二维vector的内外层大小的方法,并且每行大小都相同,那如果要求每行的长度不同怎么办呢? 可以用如下方法:

             vector< vector<int> > v;  //先声明一个二维向量

             v.resize(n);  //先根据需要指定外层大小

             for(int i=0,len;i<n;i++)   //在指定了外层大小后,接着再遍历指定内层每行的大小,此时每行的长度可以不同

             {

                 cin>>len;

                 v[i].resize(len);

             }

        (3) 还可以用push_back()来添加每行,例如

              vector< vector<int> > v;  //先声明一个二维向量

              for(int i=0,m;i<n;i++)   / /添加n行,假设n已初始化

              {

                     cin>>m;

                     push_back(vector<int>(m));  //往v里添加行,行的大小为m;vector<int>(m)也可以改成vector<int>(m,1),即用1来初始化每行

              }

              另外说一下,vector<int>(m,0);这个括号里面可以没参数,但是括号却不能省略

              此时 v.pop_back() 是用来删除最后一行的,v.size()返回的是v的行数。

    总的来说,二维向量的属性和一维向量是相同的,它们的用法也都一样,下面用代码展示了一下上面三种方法的具体用法:

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 int main()
     5 {
     6     int n=0,m=0;
     7     vector<vector<int> > v1(2,vector<int>(3)); 
     8     vector<vector<int> > v2,v3;
     9     v2.resize(3);   //指定v2有3行
    10     cout<<"输入v2每行大小,共有三行:";
    11     for(int i=0;i<v2.size();i++)
    12     {
    13         cin>>m;
    14         v2[i].resize(m); //指定v2每行的大小
    15     }
    16     cout<<"输入v3每行大小,共有四行:";    
    17     for(int i=0;i<4;i++)  //向v3里面添加四行
    18     {
    19         cin>>m;
    20         v3.push_back(vector<int>(m)); //往v3里添加行,行的大小为m
    21     }
    22     cout<<"--------------------
    ";
    23 
    24     cout<<"给v1赋值
    ";
    25     for(int i=0;i<v1.size();i++)  //给v1赋值
    26     {
    27         for(int j=0;j<v1[i].size();j++)
    28             cin>>v1[i][j];
    29     }
    30     cout<<"给v2赋值
    ";
    31     for(int i=0;i<v2.size();i++)  //给v2赋值
    32     {
    33         for(int j=0;j<v2[i].size();j++)
    34             cin>>v2[i][j];
    35     }
    36     cout<<"给v3赋值
    ";
    37     for(int i=0;i<v3.size();i++)  //给v3赋值
    38     {
    39         for(int j=0;j<v3[i].size();j++)
    40             cin>>v3[i][j];
    41     }
    42     cout<<"--------------------
    ";
    43 
    44     cout<<"v1的大小:"<<v1.size()<<"
    "<<"v1中的元素:
    ";
    45     for(int i=0;i<v1.size();i++)  //打印v1
    46     {
    47         for(int j=0;j<v1[i].size();j++)
    48             cout<<v1[i][j]<<" ";
    49         cout<<"
    ";
    50     }
    51     cout<<"
    v2的大小:"<<v2.size()<<"
    "<<"v2中的元素:
    ";
    52     for(int i=0;i<v2.size();i++)  //打印v2
    53     {
    54         for(int j=0;j<v2[i].size();j++)
    55             cout<<v2[i][j]<<" ";
    56         cout<<"
    ";
    57     }
    58     cout<<"
    v3的大小:"<<v3.size()<<"
    "<<"v3中的元素:
    ";
    59     for(int i=0;i<v3.size();i++)  //打印v3
    60     {
    61         for(int j=0;j<v3[i].size();j++)
    62             cout<<v3[i][j]<<" ";
    63         cout<<"
    ";
    64     }
    65 
    66     v1.pop_back();  //用pop_back()删除最后一行
    67     v2.pop_back();
    68     v3.pop_back();
    69 
    70     cout<<"-------删除最后一行后再打印---------
    ";
    71     cout<<"v1的大小:"<<v1.size()<<"
    "<<"v1中的元素:
    ";
    72     for(int i=0;i<v1.size();i++)  //打印v1
    73     {
    74         for(int j=0;j<v1[i].size();j++)
    75             cout<<v1[i][j]<<" ";
    76         cout<<"
    ";
    77     }
    78     cout<<"
    v2的大小:"<<v2.size()<<"
    "<<"v2中的元素:
    ";
    79     for(int i=0;i<v2.size();i++)  //打印v2
    80     {
    81         for(int j=0;j<v2[i].size();j++)
    82             cout<<v2[i][j]<<" ";
    83         cout<<"
    ";
    84     }
    85     cout<<"
    v3的大小:"<<v3.size()<<"
    "<<"v3中的元素:
    ";
    86     for(int i=0;i<v3.size();i++)  //打印v3
    87     {
    88         for(int j=0;j<v3[i].size();j++)
    89             cout<<v3[i][j]<<" ";
    90         cout<<"
    ";
    91     }
    92     return 0;
    93 }

    结果如下:

     还想再补充一下,不管是一维的还是二维的vector,凡是在指定好vector的大小以后,系统一般会自动将它初始化,默认初始化为0,下面验证一下:

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 int main()
     5 {
     6     int n=0,m=0;
     7     vector<vector<int> > v1(2,vector<int>(3)); 
     8     vector<vector<int> > v2,v3;
     9     v2.resize(3);   //指定v2有3行
    10     cout<<"输入v2每行大小,共有三行:";
    11     for(int i=0;i<v2.size();i++)
    12     {
    13         cin>>m;
    14         v2[i].resize(m); //指定v2每行的大小
    15     }
    16     cout<<"输入v3每行大小,共有四行:";    
    17     for(int i=0;i<4;i++)  //向v3里面添加四行
    18     {
    19         cin>>m;
    20         v3.push_back(vector<int>(m)); //往v3里添加行,行的大小为m
    21     }
    22     cout<<"--------------------
    ";
    23 
    24     cout<<"v1的大小:"<<v1.size()<<"
    "<<"v1中的元素:
    ";
    25     for(int i=0;i<v1.size();i++)  //打印v1
    26     {
    27         for(int j=0;j<v1[i].size();j++)
    28             cout<<v1[i][j]<<" ";
    29         cout<<"
    ";
    30     }
    31     cout<<"
    v2的大小:"<<v2.size()<<"
    "<<"v2中的元素:
    ";
    32     for(int i=0;i<v2.size();i++)  //打印v2
    33     {
    34         for(int j=0;j<v2[i].size();j++)
    35             cout<<v2[i][j]<<" ";
    36         cout<<"
    ";
    37     }
    38     cout<<"
    v3的大小:"<<v3.size()<<"
    "<<"v3中的元素:
    ";
    39     for(int i=0;i<v3.size();i++)  //打印v3
    40     {
    41         for(int j=0;j<v3[i].size();j++)
    42             cout<<v3[i][j]<<" ";
    43         cout<<"
    ";
    44     }
    45     return 0;
    46 }

    结果如下:

  • 相关阅读:
    物料外部编码的模糊查询
    ◆◆1LSMW的简单范例-LSMW导入会计科目
    通过Tcode查找LSMW
    LSMW批量更新物料主数据
    ◆◆0HR报表开发-Join & Projection
    HR常用宏(一)
    ◆◆0PM01-创建信息类型(infotype)教程
    keras_9_激活函数 Activations
    keras_8_优化器 Optimizers
    keras_7_评估标准 Metrics
  • 原文地址:https://www.cnblogs.com/buanxu/p/12792180.html
Copyright © 2011-2022 走看看