当前位置: 首页 > 知识库问答 >
问题:

向量如何比向量“重”?

卞嘉许
2023-03-14

在最近的一次采访中,我建议使用向量

编码过程结束后,他们说在向量上使用pair是个好主意,并要求我详细说明我之前所说的“更重”是什么意思。不幸的是,我无法详细说明。是的,我知道我们只能在一对中输入两个值,但在一个向量中可以输入更多的值,并且当向量的大小==容量等时,该向量会自动调整大小。但是我应该如何回答他们的问题?为什么具体使用<代码>向量

共有2个答案

慕朝明
2023-03-14

你可以回答这个问题,而不用参考任何特定的语言。这个问题需要存储一个2元组序列。当然,您选择的类型应该能够存储2个元组,但也不能存储其他大小的元组。因此,给定两种都能够存储所需值的类型,最好选择存储不需要的值能力较差的类型。

<代码>矢量

(不要低估公认答案中提到的性能优势,只是为了提供使用精确类型的纯语义论据。)

慕迪
2023-03-14

每个向量都是动态分配的单个连续内存区域。

假设您将使用1000个值。

std::vector<std::pair<int, int>>

这为您提供了一个单独的、连续的内存块,用于2000个整数。

std::vector<std::vector<int>>

这将获得1000个向量的单个连续内存块。

这1000个std::vector中的每一个只为两个整数获得另一个连续的内存块。

因此,对于这个数据结构,它将由分散在各处的1001个内存块组成,而不是一个连续的内存块。你不能保证所有这些内存块都会一个接一个地连续。

每次动态内存分配都是有代价的。成本相当小,但增长非常快。一分钱很容易被忽视。1000便士应该足够你在星巴克喝一杯咖啡了。

此外,现代CPU非常非常善于访问连续的内存块。在一个连续的内存块上迭代以累积2000个int将比在1000个不相连的内存段上进行同样的操作快得多。

 类似资料:
  • 我有一个整数向量: 考虑到将始终为偶数。 我只是想把相邻的元素转换成一对,像这样: i、 两个相邻的元件连接成一对。 我可以使用什么STL算法轻松实现这一点?有没有可能通过一些标准算法来实现这一点? 当然,我可以很容易地编写一个旧的索引for循环来实现这一点。但我想知道,使用基于范围的for循环或任何其他STL算法(如等)最简单的解决方案是什么样的。

  • 矢量或者说向量,可以通过2~4个分量表示一个向量,比如通过vec3(1,0,0)表示三维空间中一个沿着x轴正方向的三维方向向量,如果你有高中数学的基础,应该对向量有一定的了解,对于三维坐标的相关几何运算也有一定的概念。 关键字 数据类型 vec2 二维向量,具有xy两个分量,分量是浮点数 vec3 三维向量 ,具有xyz三个分量,分量是浮点数 vec4 四维向量 ,具有xyzw四个分量,分量是浮点

  • 我正在尝试将嵌套列表结构转换为DataFrame。该列表类似于以下内容(它是来自解析的JSON的序列化数据,使用httr包读取)。 编辑:我最初的示例数据太简单了。实际数据是不完整的,这意味着并非每个对象都存在所有变量,并且一些列表元素是空的。我编辑了数据来反映这一点。

  • 主要内容:引用向量的元素,向量运算向量是数字的一维数组。在MATLAB中,允许创建两种类型的向量 - 行向量 列向量 行向量 行向量是通过用方括号中的元素集合来创建的,使用空格或逗号分隔元素。 MATLAB将执行上述语句并返回以下结果 - 列向量 列向量是通过用方括号中的元素集合来创建的,分号用于分隔元素。 MATLAB将执行上述语句,返回以下结果 - 引用向量的元素 可以通过多种方式来引用一个或多个向量的元素。向量的第个分量叫作

  • 要想MATLAB最高速地工作,重要的是在M-文件中把算法向量化。其他程序语言可能用for或DO循环,MATLAB则可用向量或矩阵运算。下例是创立一个算法表。 x = .01; for k = 1:1001 y(k) = log10(x); x = x + .01; end 同样代码地向量化翻译是 x = .01:.01:10; y = log10(x); 对于更复杂的代码,矩阵化选

  • 本文向大家介绍clojure 向量,包括了clojure 向量的使用技巧和注意事项,需要的朋友参考一下 示例 向量用方括号表示: 除了使用文字语法之外,您还可以使用该vector函数来构造向量: 您可以使用vector?谓词测试某物是否为向量: conj 在向量的末尾添加元素: count 以固定时间返回项目数: 您可以使用来获得向量的最后一个元素peek: 您可以使用来获得没有最后一个元素的新向