[英]C++: Dynamically growing 2d array
使用vector
解决以下情况,但是我的一位老同事在一次讨论中告诉我,使用数组会更快。
我从很多音频文件中计算出很多(我的意思是很多!)12维矢量,并且必须将它们存储起来以进行处理。 在开始计算之前,我确实需要所有这些向量。 无论如何,我无法预测多少个音频,也无法预测从每个音频中提取了多少矢量。 因此,我需要一种结构来动态保存向量。
因此,我为每个向量创建一个新的double数组,并将其推入vector
。
我现在要面对并测试一下,如果我的同事真的是对的,那么可以通过使用数组而不是向量进行存储来提高计算效率。
vector<double*>* Features = new vector<double*>();
double* feature = new double[12];
// adding elements
Features->push_back(features);
据我所知,我要动态创建二维数组,我需要知道行数。
double* container = new double*[rows];
container[0] = new double[12];
// and so on..
我在处理所有音频后都知道行,并且我不想对音频进行两次处理。
任何人都对如何解决并将其附加有任何想法,或者这是否不可能,我应该使用vector
或创建自己的结构(假定可能比vector慢)。
除非有很强的理由不这样做,否则我建议这样:
std::vector<std::array<double, 12>> Features;
您可以获得所需的所有内存位置,以及所需的所有自动内存管理。
您当然可以做到这一点,但是如果使用std::vector
执行此操作会更好。 为了动态增长2D阵列,您必须执行所有这些操作。
在每个步骤中执行完此操作之后,几乎不可能接受数组会更快。 使用std:vector
。 以上书面答案对此进行了解释。
使用矢量会使问题变得更容易,因为它使数据自动增长。 不幸的是,由于向量的增长方式,使用向量可能不是最佳的解决方案,因为增长大数据集需要多次。 另一方面,如果将向量的初始大小设置得很大,但只需要少量的12个索引数组。 您只是浪费了大量的内存。 如果可以通过某种方式产生所需大小的猜测,则可以使用该猜测值动态分配数组或将向量初始设置为该大小。
如果只用一次或两次计算数据,那么也许应该考虑使用map或list。 大型阵列的这两个结构将创建一个满足您确切需求的内存结构,并绕开阵列增长所需的额外时间。 另一方面,使用这些数据结构的计算将较慢。
我希望这些想法能为该讨论添加一些替代解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.