和数组一样,数组有二维的数组,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. MySQL:锁机制和隔离事务级别

    在mysql中的锁看起来是很复杂的,因为有一大堆的东西和名词:排它锁,共享锁,表锁,页锁,间隙锁,意向排它锁,意向共享锁,行锁,读锁,写锁,乐观锁,悲观锁,死锁.这些名词有的博客又直接写锁的英文的简写 ...

  2. nginx代理图片访问

    nginx代理图片访问 首先配置nginx的代理物理路径 我的是在E盘下面的image 1 #图片的代理 2 server { 3 listen 80; 4 #配置访问的域名 5 server_nam ...

  3. Dockerfile极简入门与实践

    前文中,罗列了docker使用中用到的基本命令 此文,将会对怎样使用Dockerfile去创建一个镜像做简单的介绍 Dockerfile命令 要开始编写Dockerfile,首先要对相关的命令有个清晰 ...

  4. MQTT协议实现Android中的消息收发

    前言 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),基于发布/订阅范式的消息协议,是一种极其简单和轻量级的消息协议,专为受限设备和低带宽.高延迟 ...

  5. Vue学习(2)---v-指令和组件

    Vue中的指令 Vue中以带有前缀V-的属性被称为指令(带有v表示他们是Vue提供的特殊attribute) 一个v-bind的例子 <div id="app" v-bind ...

  6. go的channel

    go语言channel go语言提供了goroutine来实现并发,go语言也提供了channel来实现并发事件之间的通信. 传统的编程语言通过共享内存来实现通信,当多个线程同时操作一个共享变量的时候 ...

  7. django自定义404和500页面

    from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.s ...

  8. Array(数组)对象-->数组的访问

    1.访问数组: 通过指定数组名以及索引号码,你可以访问某个特定的元素. 格式: 数组对象名[下标] 例如:arr[0]  就是访问数组第一个值 var arr = new Array(3); arr[ ...

  9. 武汉加油!(Python版)

    #武汉加油!import turtle as tt.pensize(20)t.pencolor("blue")t.setup(1700, 600) t.penup()#-t.got ...

  10. Python入门学习指导(VS Code配置向)

    代码编辑器或IDE 推荐Vs Code,Atom和Sublime(本文以Vs Code为例,Sublime对中文支持不是很好,时常弄好了Sublime的乱码,却在复制到其他编辑器时出了问题) Vs C ...