和数组一样,数组有二维的数组,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. java fork/join简单实践

    我们知道,java8中有并行流,而并行流在后台的实现是通过fork/join池来完成的,例如: List<Integer> a = buildList(); List<Integer ...

  2. Selenium系列(二十) - PageObject模式的详细介绍

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  3. Oracle如何查询不等于某数值

    前言 今天在使用Oracle查询“不等于”的时候,发现得到的数据与期望中的不一样,进一步查找资料才有发现. 1.Oracle的不等于 在Oracle中,"<>".&qu ...

  4. Java 连接数据库总是报错

    mysql账号密码是正确的,但是一直报账号密码错误. 报错信息: java.sql.SQLException: Access denied for user 'root'@'localhost' (u ...

  5. 使用gulp自动构建项目

    网址:https://segmentfault.com/a/1190000011514257

  6. Shell:Day06.笔记

    sed命令 Linux文本处理三剑客 之 sed sed stream EDite  作为行编辑器,对文本进行编辑(以行为单位进行编辑)  注意:sed编辑文件,却不改变原文件:  sed的工作原理: ...

  7. php人民币小写转大写函数,不限长度,精确到分

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ustb80.blog.51cto.com/6139482/1035327 在打印 ...

  8. SI24R2F新一代2.4G超低功耗单发射有源RFID芯片 SI24R2E升级版智能充电安全管理方案首选

    目前全国有很多电动车因在充电时电池温度过高,而导致爆炸引起火灾的情况.作为国内RFID行业的推动者,动能世纪联合中科微向IOT应用领域推出新款大功率2.4G射频芯片,并针对电动车防盗.电动车充电桩市场 ...

  9. Jmeter 压力测试笔记(2)--问题定位

    事情已经出了,是该想办法解决的时候了. 经过运维和DBA定位: 数据库读写分离中,读库延时超过了30秒,导致所有请求都压在主库.另外所有数据库都连接数都被占满,但活跃请求数量缺不多. 数据库16K的连 ...

  10. 微信小程序H5预览页面框架(二维码不隐藏)

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...