我想使用大尺寸矢量。但是这些向量在内存中分配了大量内容并导致错误。
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));
我想在程序中的所有代码中使用它们。什么是最好的解决方案?
答案 0 :(得分:1)
首先谈谈你的问题:
vector<vector<double> > v;
cout<< v.max_size();
这段代码给出了输出268435455
和768614336404564650
(当编译为64位时)。此外,在我的机器中,它不会抛出任何编译错误,但程序会挂起(即分配永远不会发生在32位)。虽然64位中的所有三个向量都被分配但没有错误。所以基本上这可能是vs12中的错误或者可能不是错误,只是一个未定义的行为(因为c ++标准没有提供任何有关此分配的内容)。
现在关于您的解决方案:您可以使用磁盘数据结构,这将慢得多。有很多图书馆可以帮到你。您可以查看HERE以找到一个。
Similar vs。
中的错误答案 1 :(得分:0)
您需要的工具取决于您要实现的目标。但是,预先分配的预分配大向量的大向量几乎肯定不是正确的选择。
如果矢量大小保持不变,您可能会创建类似矩阵的东西,在这种情况下,最好使用矩阵库,例如优秀的Eigen。
如果您正在使用大型矩阵进行矩阵计算,那么值得考虑稀疏矩阵的性能是否会更好(换句话说就是数据稀疏)。
如果您正在使用大型数据阵列进行数学运算,您可能还应考虑使用GPU库,因为可以将速度提高10倍到100倍。我相信Eigen可以使用GPU,但我自己从未这样做过。
如果你正在构建一个不会像矩阵一样使用的大型表,那么你可能需要一些其他的数据结构,可能是磁盘上的数据库和类似数据库的东西。请发布一些您想要做的更多细节。