二维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的行数。
总的来说,二维向量的属性和一维向量是相同的,它们的用法也都一样,下面用代码展示了一下上面三种方法的具体用法:
#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的使用的更多相关文章
- 动态创建二维vector数组 C和C++ 及指针与引用的区别
二维vectorvector<vector <int> > ivec(m ,vector<int>(n)); //m*n的二维vector 动态创建m*n的二 ...
- 二维vector容器读取txt坐标
template <class vector> struct HeadLocation{ vector x; vector y; }; vector<HeadLocation< ...
- C++-二维vector初始化大小方法-备忘
来源: C++——二维vector初始化大小方法 1.直接用初始化方法 名字为vec,大小为n*m,初始值为0的二维vector. vector<vector<)); 2.用resize( ...
- 二维vector基本使用
变量声明 vector<vector<int> > 变量名: 添加行 vector<vector<int> > v2d; for(int i=0;i&l ...
- C++STL二维vector指定位置排序
自己一直用vector 二维的存储变量 有时候需要进行排序 在此 为记录一下方法 废话少说直接上代码 #include <QCoreApplication> #include <io ...
- C++——二维vector初始化大小方法
初始化二维vector,为r*c的vector,所有值为0.1.直接用初始化方法(刚开始没想到) vector<vector<int> > newOne(r, vector&l ...
- leetcode 15. 3Sum 二维vector
传送门 15. 3Sum My Submissions Question Total Accepted: 108534 Total Submissions: 584814 Difficulty: Me ...
- 从csv文件读取数据到二维vector
void ReadDataFromCsv(std::string &filename, std::vector<std::vector<std::string> > & ...
- C++ vector 实现二维数组时, 在类的头文件中定义时遇到"应输入类型符"的问题?
见下,当我在类的声明文件中定义二维vector时,提示我应输入类型说明符; 但是相同的格式定义,在类中将二维vector修改为在源文件中定义就可以顺利通过,并顺利执行打印 打印结果如下: 望大神来解惑 ...
随机推荐
- 开源APP
仿微信 https://github.com/zhengwenming/WeChat 电台韵律 https://github.com/DaMingShen 运动App https://github.c ...
- Android 数据库框架 DBFlow 的使用
原文首发于微信公众号:jzman-blog,欢迎关注交流! DBFlow 是一个基于注解处理器开发的使用方便的 ORM Android 数据库,该库简化了很多多余的代码,并且提供了好用的 API 来处 ...
- Java 运行时数据区
写在前面 本文描述的有关于 JVM 的运行时数据区是基于 HotSpot 虚拟机. 概述 JVM 在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以 ...
- RMI 使用笔记
Java 远程方法调用,即 Java RMI( Java Remote Method Invocation ) .顾名思义,可以使客户机上运行的程序能够调用远程服务器上的对象(方法). 下面主要介绍一 ...
- time_wait 详解和解决方案
1. 产生原因 2. 导致问题 3. Nginx 3.1 长连接 4. 解决方案 5 .参考 产生原因 TCP 连接关闭时,会有 4 次通讯(四次挥手),来确认双方都停止收发数据了.如上图,主动关闭方 ...
- java仿win7计算器布局
代码: package calculator; import javax.swing.*; import java.awt.*; import java.awt.event.*; public cla ...
- django-rest-framework视图和url
django-rest-framework视图 GenericView class GenericView(GenericAPIView): queryset = models.Role.object ...
- NHibernate COUNT(*) 统计问题
NHibernate这个框架用了有一年多了,相对有很大的优势,可以省去很多写Sql的时间. 但是如果你想用它做统计,那么有点抱歉,只能手动写写了.它内置的东西很难符合你的需求. 我遇到的问题是这样的. ...
- PHP中debug基本方法
一.检查是否有语法错误 php -l test.php 二.基本调试基本调试 API: var_dump($var);print_r($var);echo $var; 基本的配置: display_e ...
- Array(数组)对象-->unshift() 方法
1.定义和用法 unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度. 语法: array.unshift(item1,item2, ..., itemX) 参数:item1,it ...