用vector实现二维向量
如果一个向量的每一个元素是一个向量,则称为二维向量,例如
- vector<vector<int> >vv(3, vector<int>(4));//这里,两个“>”间的空格是不可少的
将构造一个二维向量vv,它含有三个元素,每个元素含有4个int型元素的向量。编译器两次调用vector的构造函数构造对象vv,第一次调用构造函数构造了一个无名的含有4个0的vector<int>对象:
| [0] | [1] | [2] | [3] |
| 0 | 0 | 0 | 0 |
第二次调用构造函数,以这个无名向量为初值初始化它的三个元素,结果是:
| vv | [0] | [1] | [2] | [3] |
| [0] | 0 | 0 | 0 | 0 |
| [1] | 0 | 0 | 0 | 0 |
| [2] | 0 | 0 | 0 | 0 |
vv[i]表示第i(i=0,1,2)行的元素组成的向量。vv.size()的值是3,vv[1].size()的值是4.
一个二维向量每个元素的长度可以不同,例如
- vector<vector<int> >vv;
- for(int c = 1; c <= 3; c++)
- vv.push_back(vector<int>(c,0));
上面代码产生一个长度不同的二维向量,第一行只有1个元素,第二行有两个,第三行三个。
应用例子:输入一个n个整数,将他们分别除以选定的一个整数(称为模),按余数将这些整数分组。
- #include <iostream>
- #include <vector>
- using namespace std;
- void classify(vector<int>& v,int mode, vector<vector<int> >& vv)
- {
- for (vector<int>::const_iterator iter = v.begin(); iter != v.end(); iter++)
- {
- int index = (*iter) % mode;//取余数
- vv[index].push_back(*iter);//插入元素
- }
- }
- int main()
- {
- int mode;//模
- cin>>mode;
- vector<vector<int> >vv(mode);//定义了一个有mode行的二维向量
- int n;//n个整数
- cin>>n;
- vector<int>v(n);//一维向量,保存n个整数
- for (int i = 0;i < n; i++)
- cin>>v[i];
- //开始分类
- classify(v,mode,vv);
- for (i = 0; i < mode; i++)
- {
- cout<<"余数是 "<<i<<":";
- if(vv[i].empty())
- cout<<endl;
- else
- {
- for (vector<int>::const_iterator p = vv[i].begin(); p != vv[i].end(); p++)
- cout<<*p<<" ";
- cout<<endl;
- }
- }
- return 0;
- }
运行结果:

用vector实现二维向量的更多相关文章
- [LeetCode] Flatten 2D Vector 压平二维向量
Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...
- [LeetCode] 251. Flatten 2D Vector 压平二维向量
Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...
- [VB.NET][C#]二维向量的基本运算
前言 在数学中,几何向量指具有大小(Magnitude)和方向的几何对象,它在线性代数中经由抽象化有着更一般的概念.向量在编程中也有着及其广泛的应用,其作用在图形编程和游戏物理引擎方面尤为突出. 基于 ...
- uda 3.C++二维向量
二维向量 接下来,你将使用向量来存储矩阵.就像 Python 使用列表列表来存储矩阵一样,C++ 使用的是向量的向量.用于声明二维向量的语法有点复杂. 假设你正在使用 Python,并且想存储一个 3 ...
- 【Unity3D】计算二维向量夹角(-180到180)
在Unity3D中,有时候我们需要计算二维向量的夹角.二维向量夹角一般在0~180度之前,可以直接调用Vector2.Angle(Vector2 from, Vector2 to)来计算. 但是在有些 ...
- vector作为二维数组
vector本来就是可以用来代替一维数组的,vector提供了operator[]函数,可以像数组一样的操作,而且还有边界检查,动态改变大小. 这里只介绍用它来代替二维的数组,二维以上的可以依此类推. ...
- C++ vector 实现二维数组时, 在类的头文件中定义时遇到"应输入类型符"的问题?
见下,当我在类的声明文件中定义二维vector时,提示我应输入类型说明符; 但是相同的格式定义,在类中将二维vector修改为在源文件中定义就可以顺利通过,并顺利执行打印 打印结果如下: 望大神来解惑 ...
- C++ vector 实现二维数组
在STL中Vector这一容器,无论是在封装程度还是内存管理等方面都由于传统C++中的数组.本文主要是关于使用Vector初始化.遍历方面的内容.其他二维的思想也是类似的. 这里简单叙述一下C++ 构 ...
- c++用vector创建二维数组
1 vector二维数组的创建和初始化 std::vector <int> vec(10,90); //将10个一维动态数组初始为90std::vector<std::vector& ...
随机推荐
- cocos2d-js 定时器
1.scheduleUpdate 节点中有scheduleUpdate接口,通过这个接口,可以让游戏在每帧执行都执行update方法 var ScheduleUpdateLayer = cc.Laye ...
- Luogu 2375 [NOI2014]动物园
字胡串什么的一直不太会,感觉这题…还蛮本质的 考虑暴力求解:num[i]相当于从一直跳nxt,如果nxt[j] * 2 <= i 那么就累加答案 其实这是一个树的结构,也就是说跳到一个结点满足条 ...
- c/c++头文件中#ifndef/#define/#endif的用法
想必很多人都看过“头文件中用到的 #ifndef/#define/#endif 来防止该头文件被重复引用”.但是是否能理解“被重复引用”是什么意思?头文件被重复引用了,会产生什么后果?是不是所有的头文 ...
- jquery ajax 分页
<script src="../Js/jQuery/jquery-1.8.2.min.js" type="text/javascript">< ...
- [raspberry pi3] 安装aarch64 opensuse
raspberry 虽然是64bit的cpu,但是用的系统一直都是32bit的,32bit的系统还是有不少的局限性的, 比如mongodb,Y2038. suse 发布了个64bit的server版本 ...
- C#socket通信时,怎样判断socket双方是否断开连接
我在Server端new了一个socket,然后bind,开了一个线程来accept前来连接的client,每接到一个client前来连接就新开一个线程和它进行通信.我把Server端得到的socke ...
- ubuntu - 安装软件问题
problem & solution 问题1 - E: 无法定位软件包 @原因(1) - 没有添加相应软件的镜像源(软件源) 解决方案 用 gedit/vi/vim - 在 /etc/a ...
- 深入浅出git
图文 http://www.cnblogs.com/syp172654682/p/7689328.html 廖雪峰 https://www.liaoxuefeng.com/wiki/001373951 ...
- poj2406 Power Strings(kmp)
poj2406 Power Strings(kmp) 给出一个字符串,问这个字符串是一个字符串重复几次.要求最大化重复次数. 若当前字符串为S,用kmp匹配'\0'+S和S即可. #include & ...
- flink学习笔记-快速生成Flink项目
说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...