在c++中使用大尺寸矢量的可视化工作

visual work with large size vectors in c++

本文关键字:可视化 工作 c++      更新时间:2023-10-16

我想使用大尺寸矢量。但是这些向量在内存中分配了很大的大小,并导致了错误。。

size=10000;
//2D vector doubles 
vector<vector<double>> vecA(size,vector<double>(size));
vector<vector<double>> vecB(size,vector<double>(size));
vector<vector<double>> vecC(size,vector<double>(size));

我想在程序中的所有代码中使用它们。什么是最佳解决方案?

首先谈谈你的问题:

vector<vector<double> > v;
cout<< v.max_size();

这段代码给了我输出268435455768614336404564650(当编译为64位时)。此外,在我的机器中,它没有抛出任何编译错误,但程序挂起(即分配从未在32位中发生)。尽管在64位中,所有三个矢量都被分配,没有错误。因此,基本上这可能是vs12中的一个错误,也可能不是错误,只是是一个未定义的行为(因为c++标准不考虑任何关于此分配的内容)

现在谈谈您的解决方案:您可以使用磁盘上的数据结构,这会慢得多。有很多图书馆可以为你做这件事。你可以在这里查一下。


与类似的错误

您需要的工具取决于您试图实现的目标。然而,几乎可以肯定的是,预分配的大向量中的预分配的大型向量不是正确的选择。

如果向量大小保持不变,你可能会创建一个类似矩阵的东西,在这种情况下,你最好使用矩阵库,比如优秀的Eigen。

如果你用大矩阵进行矩阵计算,那么值得考虑的是稀疏矩阵(换句话说,数据是稀疏的)的性能是否会更好。

如果你在用大数据阵列做数学运算,你可能也应该考虑使用GPU库,因为这样可以获得10倍到100倍的速度。我相信Eigen可以使用GPU,但我自己从来没有这样做过。

如果您正在构建一个不会像矩阵一样使用的大表,那么您可能需要一些其他数据结构,也许是磁盘和数据库上的数据结构。请发布更多关于您尝试做什么的详细信息。