和数组一样,数组有二维的数组,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. 剑指offer刷题总结

    ★ 二维数组的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否 ...

  2. MySQL出现的问题

    错误展示 今天还是老样子照常启动MySQL WorkBench的时候出了错误,无法连接服务器 CMD登陆也不行 发现mysql的服务都没启动,于是点击启动,却又报这个错 cmd查看MySQL的日志,想 ...

  3. 用css3实现摩天轮旋转的动画效果

    用css3实现摩天轮旋转的动画效果 1.CSS3 @keyframes 规则如需在 CSS3 中创建动画,您需要学习 @keyframes 规则.@keyframes 规则用于创建动画.在 @keyf ...

  4. Java实现tif/tiff/bmp图片转换png图片

    package org.analysisitem20181016.test; import java.io.File; import java.io.FileOutputStream; import ...

  5. (C++ Error: Incompatible types in assignment of ‘char*’ to ‘char [2])

    in C++, cannot assign a pointer to an array. c++中char*与char[]不是一种类型,但是在C里面可以,所以尽量使用C++中的类,如string, v ...

  6. 1064 Complete Binary Search Tree (30分)(已知中序输出层序遍历)

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...

  7. PHP中涉及文件路径的讨论

    #1 $_SERVER中的PHP_SELF,当前执行脚本的文件名,与 document root 有关.例如,在地址为 http://example.com/test.php/foo.bar 的脚本中 ...

  8. 【php】字符串

    1.字符串的定义方式:1.单引号 ''2.双引号 ""3.定界符 <<<注意结束时的使用例:$str = <<<myStr字符串内容myStr; ...

  9. java文件中字母出现的次数和百分比

    主要是文件的读写.先在代码中导入文件.一行一行的进行数据的读入,通过“  ”空格对读入的信息进行分割,存入到数组里之后对于每一个单词的每一个字母进行区分存入相应的字母数组里.最后统计总的字母个数.应用 ...

  10. wireshark抓包实战(六),过滤器

    目录 一.抓包过滤器 1.语法来源 2.语法 二.显示过滤器 1.语法来源 2.关键要素 wireshark中,过滤器有两种,一种是抓包过滤器,一种是显示过滤器! 抓包过滤器适合大网络环境,配置与抓包 ...