和数组一样,数组有二维的数组,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的行数。

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

 #include<iostream>
#include<vector>
using namespace std;
int main()
{
int n=,m=;
vector<vector<int> > v1(,vector<int>());
vector<vector<int> > v2,v3;
v2.resize(); //指定v2有3行
cout<<"输入v2每行大小,共有三行:";
for(int i=;i<v2.size();i++)
{
cin>>m;
v2[i].resize(m); //指定v2每行的大小
}
cout<<"输入v3每行大小,共有四行:";
for(int i=;i<;i++) //向v3里面添加四行
{
cin>>m;
v3.push_back(vector<int>(m)); //往v3里添加行,行的大小为m
}
cout<<"--------------------\n"; cout<<"给v1赋值\n";
for(int i=;i<v1.size();i++) //给v1赋值
{
for(int j=;j<v1[i].size();j++)
cin>>v1[i][j];
}
cout<<"给v2赋值\n";
for(int i=;i<v2.size();i++) //给v2赋值
{
for(int j=;j<v2[i].size();j++)
cin>>v2[i][j];
}
cout<<"给v3赋值\n";
for(int i=;i<v3.size();i++) //给v3赋值
{
for(int j=;j<v3[i].size();j++)
cin>>v3[i][j];
}
cout<<"--------------------\n"; cout<<"v1的大小:"<<v1.size()<<"\n"<<"v1中的元素:\n";
for(int i=;i<v1.size();i++) //打印v1
{
for(int j=;j<v1[i].size();j++)
cout<<v1[i][j]<<" ";
cout<<"\n";
}
cout<<"\nv2的大小:"<<v2.size()<<"\n"<<"v2中的元素:\n";
for(int i=;i<v2.size();i++) //打印v2
{
for(int j=;j<v2[i].size();j++)
cout<<v2[i][j]<<" ";
cout<<"\n";
}
cout<<"\nv3的大小:"<<v3.size()<<"\n"<<"v3中的元素:\n";
for(int i=;i<v3.size();i++) //打印v3
{
for(int j=;j<v3[i].size();j++)
cout<<v3[i][j]<<" ";
cout<<"\n";
} v1.pop_back(); //用pop_back()删除最后一行
v2.pop_back();
v3.pop_back(); cout<<"-------删除最后一行后再打印---------\n";
cout<<"v1的大小:"<<v1.size()<<"\n"<<"v1中的元素:\n";
for(int i=;i<v1.size();i++) //打印v1
{
for(int j=;j<v1[i].size();j++)
cout<<v1[i][j]<<" ";
cout<<"\n";
}
cout<<"\nv2的大小:"<<v2.size()<<"\n"<<"v2中的元素:\n";
for(int i=;i<v2.size();i++) //打印v2
{
for(int j=;j<v2[i].size();j++)
cout<<v2[i][j]<<" ";
cout<<"\n";
}
cout<<"\nv3的大小:"<<v3.size()<<"\n"<<"v3中的元素:\n";
for(int i=;i<v3.size();i++) //打印v3
{
for(int j=;j<v3[i].size();j++)
cout<<v3[i][j]<<" ";
cout<<"\n";
}
return ;
}

结果如下:

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

 #include<iostream>
#include<vector>
using namespace std;
int main()
{
int n=,m=;
vector<vector<int> > v1(,vector<int>());
vector<vector<int> > v2,v3;
v2.resize(); //指定v2有3行
cout<<"输入v2每行大小,共有三行:";
for(int i=;i<v2.size();i++)
{
cin>>m;
v2[i].resize(m); //指定v2每行的大小
}
cout<<"输入v3每行大小,共有四行:";
for(int i=;i<;i++) //向v3里面添加四行
{
cin>>m;
v3.push_back(vector<int>(m)); //往v3里添加行,行的大小为m
}
cout<<"--------------------\n"; cout<<"v1的大小:"<<v1.size()<<"\n"<<"v1中的元素:\n";
for(int i=;i<v1.size();i++) //打印v1
{
for(int j=;j<v1[i].size();j++)
cout<<v1[i][j]<<" ";
cout<<"\n";
}
cout<<"\nv2的大小:"<<v2.size()<<"\n"<<"v2中的元素:\n";
for(int i=;i<v2.size();i++) //打印v2
{
for(int j=;j<v2[i].size();j++)
cout<<v2[i][j]<<" ";
cout<<"\n";
}
cout<<"\nv3的大小:"<<v3.size()<<"\n"<<"v3中的元素:\n";
for(int i=;i<v3.size();i++) //打印v3
{
for(int j=;j<v3[i].size();j++)
cout<<v3[i][j]<<" ";
cout<<"\n";
}
return ;
}

结果如下:

二维vector的使用的更多相关文章

  1. 动态创建二维vector数组 C和C++ 及指针与引用的区别

    二维vectorvector<vector <int> > ivec(m ,vector<int>(n));    //m*n的二维vector 动态创建m*n的二 ...

  2. 二维vector容器读取txt坐标

    template <class vector> struct HeadLocation{ vector x; vector y; }; vector<HeadLocation< ...

  3. C++-二维vector初始化大小方法-备忘

    来源: C++——二维vector初始化大小方法 1.直接用初始化方法 名字为vec,大小为n*m,初始值为0的二维vector. vector<vector<)); 2.用resize( ...

  4. 二维vector基本使用

    变量声明 vector<vector<int> > 变量名: 添加行 vector<vector<int> > v2d; for(int i=0;i&l ...

  5. C++STL二维vector指定位置排序

    自己一直用vector 二维的存储变量 有时候需要进行排序 在此 为记录一下方法 废话少说直接上代码 #include <QCoreApplication> #include <io ...

  6. C++——二维vector初始化大小方法

    初始化二维vector,为r*c的vector,所有值为0.1.直接用初始化方法(刚开始没想到) vector<vector<int> > newOne(r, vector&l ...

  7. leetcode 15. 3Sum 二维vector

    传送门 15. 3Sum My Submissions Question Total Accepted: 108534 Total Submissions: 584814 Difficulty: Me ...

  8. 从csv文件读取数据到二维vector

    void ReadDataFromCsv(std::string &filename, std::vector<std::vector<std::string> > & ...

  9. C++ vector 实现二维数组时, 在类的头文件中定义时遇到"应输入类型符"的问题?

    见下,当我在类的声明文件中定义二维vector时,提示我应输入类型说明符; 但是相同的格式定义,在类中将二维vector修改为在源文件中定义就可以顺利通过,并顺利执行打印 打印结果如下: 望大神来解惑 ...

随机推荐

  1. 下面总结一些在HTML中经常使用到的快捷键

    使用的编辑器是VS code: 首先是很基础的: ctrl+s  :保存: ctrl+a  :  全选: ctrl+c , ctrl+c , ctrl+v : 剪切,复制,粘贴: ctrl+z ,ct ...

  2. Java系列之数组

    原文首发于微信公众号:jzman-blog,欢迎关注交流! 本来打算温习一下注解方面的内容作为今天的推送,但是来不及写了,那就一起来看一下数组,数组是用来存放一组具有相同类型数据的数据结构,通过下标来 ...

  3. NKOJ3772 看电影

    问题描述 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l<=r<= ...

  4. ERROR:TypeError: Cannot read property 'upgrade' of undefined

  5. PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)

    PTA数据结构与算法题目集(中文)  7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分)   在社交网络中,个人或单位(结点)之间通过某 ...

  6. 测试老司机都在用的表白神器你会吗?-Fiddler之AutoResponse线上调试

    一.Fiddler在线调试功能和表白神器介绍 ​ 在以往的工作中,线上有bug,就需要把文件弄到本地来改,但经常会碰见本地环境又和线上不一样,导致调试困难,闭着眼睛改好之后传到线上去看对不对,不对的话 ...

  7. python工业互联网监控项目实战2—OPC

    OPC(OLE for Process Control)定义:指为了给工业控制系统应用程序之间的通信建立一个接口标准,在工业控制设备与控制软件之间建立统一的数据存取规范.它给工业控制领域提供了一种标准 ...

  8. Java第十三天,内部类

    内部类 一.①成员内部类.②局部内部类(包含③匿名内部类) 1.内部类用外部类属性和方法的时候,可以随意进行访问. 2.外部类用内部类属性和方法的时候,需要通过内部类对象访问. 3.在编译成class ...

  9. 面试官求你了,别再问我TCP的三次握手和四次挥手

    少点代码,多点头发 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 三次握手建立链接,四次挥手断 ...

  10. 在OS X环境下MySQL启动时报错

    --03T00::.483037Z [ERROR] InnoDB: Unable to lock ./ibdata1 error: --03T00::.483100Z [Note] InnoDB: C ...