二维向量

接下来,你将使用向量来存储矩阵。就像 Python 使用列表列表来存储矩阵一样,C++ 使用的是向量的向量。用于声明二维向量的语法有点复杂。

假设你正在使用 Python,并且想存储一个 3 乘 5 的矩阵。你可以这么写:

matrixexample = [[2,1,5], [7,9,2], [16,5,9], [5,2,1], [1,2,4]]

在 C++ 中,你可以将矢量附加到矢量来创建一个类似的结构。下面是 Python 和 C++ 代码的比较。我们来看看:

 
 

代码解释

首先,这一行

vector < vector <int> > twodvector;

声明了一个叫做 twodvector 的空二维向量。有几件事要注意:

  • 就像 C++ 中的所有变量一样,你必须声明向量中将使用哪种类型的值。在本例中,twodvector 变量将使用整数。
  • 注意括号之间的空格 < vector <int> >。如果空格不正确,程序可能无法运行。

然后,声明一个叫做 singlerow 的一维向量。singlerow 向量的形式为 [2, 2, 2]。

vector<int> singlerow (3,2);

然后 singlerow 向量被追加到 twodvector 五次:

    for (int i = 0; i < 5; i++) {
twodvector.push_back(singlerow);
}

最终将得到与 Python 代码中一样的二维结构。运行这段 C++代码后,终端会输出如下结果:

2 2 2
2 2 2
2 2 2
2 2 2
2 2 2
 

另一种设置向量的方法

以下是前面的例子中设置向量的另一种方法:

vector < vector <int> > twodvector (5, vector <int> (3, 2));

语法要稍微复杂一点。但是,如果从括号内往外看,你会发现它实际上已经具备所有功能。

这一行:

vector <int> (3, 2)

可以设置一个整数向量,如 [2, 2, 2]。所以,即使你看不到内部的向量,代码的功能依然是这样的:

vector < vector <int> > twodvector (5, [2, 2, 2]);
`

然后,代码将[2, 2, 2] 五次应用到 twodvector 变量中:

[[2,2,2],
[2,2,2],
[2,2,2],
[2,2,2],
[2,2,2]]

请记住,只有 Python 才会用方括号[]表示向量或矩阵。较新版本的 C++可以使用大括号来表示矢量{},但 C++ 的较早版本没有对应的表示形式。

像下面这样的代码无法在 C++ 中运行:

vector < vector <int> > twodvector (5, [2, 2, 2]);
`

二维向量与 for 循环

由于二维向量只是向量内的向量,因此,二维向量和一维向量具有相同的方法 。

这就是例子中 cout 代码的作用原理:

for (int row = 0; row < twodvector.size(); row++) {
for (int column = 0; column < twodvector[0].size(); column++) {
cout << twodvector[row][column] << " ";
}
cout << endl;

输入twodvector.size()时,会给出外部向量的大小。外部向量有五个元素,它们表示矩阵中的行数:

{2 2 2}
{2 2 2}
{2 2 2}
{2 2 2}
{2 2 2}

当你输入twodvector[0].size()时,你实际上是在获取外部向量的第一个元素,[2 2 2],并请求这个向量的大小,在本例中,大小为 3。因此,for 循环实际如下:

for (int row = 0; row < 5; row++) {
for (int column = 0; column < 3; column++) {
cout << twodvector[row][column] << " ";
}
cout << endl;

uda 3.C++二维向量的更多相关文章

  1. [LeetCode] Flatten 2D Vector 压平二维向量

    Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...

  2. 【Unity3D】计算二维向量夹角(-180到180)

    在Unity3D中,有时候我们需要计算二维向量的夹角.二维向量夹角一般在0~180度之前,可以直接调用Vector2.Angle(Vector2 from, Vector2 to)来计算. 但是在有些 ...

  3. [VB.NET][C#]二维向量的基本运算

    前言 在数学中,几何向量指具有大小(Magnitude)和方向的几何对象,它在线性代数中经由抽象化有着更一般的概念.向量在编程中也有着及其广泛的应用,其作用在图形编程和游戏物理引擎方面尤为突出. 基于 ...

  4. 用vector实现二维向量

    如果一个向量的每一个元素是一个向量,则称为二维向量,例如 vector<vector<int> >vv(3, vector<int>(4));//这里,两个“> ...

  5. [LeetCode] 251. Flatten 2D Vector 压平二维向量

    Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...

  6. [Swift]LeetCode251.展平二维向量 $ Flatten 2D Vector

    Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...

  7. 二维离散余弦变换(2D-DCT)

    图像处理中常用的正交变换除了傅里叶变换以外,还有一些其它常用的正交变换,其中离散余弦变换DCT就是一种,这是JPEG图像压缩算法里的核心算法,这里我们也主要讲解JPEG压缩算法里所使用8*8矩阵的二维 ...

  8. 二维vector的使用

    和数组一样,数组有二维的数组,vector也有二维的vector.下面就介绍一下二维vector的使用方法. 一般声明初始化二维vector有三种方法 (1) vector< vector< ...

  9. 二维DCT变换 | Python实现

    引言 最近专业课在学信息隐藏与数字水印,上到了变换域隐藏技术,提到了其中的DCT变换,遂布置了一个巨烦人的作业,让手动给两个\(8\times8\)的矩阵做二维DCT变换,在苦逼的算了一小时后,我决定 ...

随机推荐

  1. 给没有id主键的表添加id,并设置为not null 然后填充自增id

    买的ip数据库,表上不带id 使用hibernate比较麻烦,所以直接改表 增加一个字段id,类型int ALTER TABLE t_ip ADD id int; 设置id不为空设置为主键,自增 AL ...

  2. JavaScript实现无缝滚动 原理详细讲解

    先了解一下对象的几个的属性: innerHTML: 设置或获取位于对象起始和结束标签内的 HTML scrollHeight: 获取对象的滚动高度. scrollLeft: 设置或获取位于对象左边界和 ...

  3. Faster RCNN算法训练代码解析(3)

    四个层的forward函数分析: RoIDataLayer:读数据,随机打乱等 AnchorTargetLayer:输出所有anchors(这里分析这个) ProposalLayer:用产生的anch ...

  4. 【python小随笔】Django+错误日志(配置Django报错文件指定位置)

    1:  自定义日志文件.py----------几个文件需要创建日志,就需要重新定义几份 # 定义一个日志文件 创建一个操作日志对象logger file_1 = logging.FileHandle ...

  5. HTTP请求封装Java工具类

    装载自:http://www.open-open.com/lib/view/open1384844838743.html package com.wiker; import java.io.Buffe ...

  6. Bigdecimal 相加结果为0的解决

    之前很少使用这样的一个对象BigDecimal,今天在改需求的时候遇到了,结果坑爹的怎么相加最后都为零. 代码如下: BigDecimal totalAmount = new BigDecimal(0 ...

  7. 获得CSM(Certified Scrum Master)-价值驱动交付。

    2019年越来越多的企业开始实行敏捷转型,紧随时代潮流,学习最先进的科学管理方法,找到正确的人(团队),为企业交付高价值的产品服务. 导师Ethan ,培训的课程让人收益匪浅,活到老学到老,丰富的知识 ...

  8. 【水滴石穿】RNNewsGo

    项目地址为:https://github.com/ImVeryGood/RNNewsGo 我们先来看一下页面 分析了一下项目,项目也是有用到redux-saga的 然后模块比较清晰 接下来我们分析代码 ...

  9. saltstack+python批量修改服务器密码

    saltstack安装:略过 python脚本修改密码: # -*- coding utf-8 -*- import socket import re import os import sys imp ...

  10. Unicode, UTF-8, GBK, ASCII的区别

    看完知乎的两篇文章大概就明白了 https://zhuanlan.zhihu.com/p/25435644 https://www.zhihu.com/question/23374078 看完总结一下 ...