为了处理庞大的数据集,我一直在使用方便的STXXL library.Though,在尝试使用/生成多维向量时遇到了一个小问题。
下面的程序将系统冻结一段时间,然后被杀死。命令行上没有输出:
typedef stxxl::vector<int> vector;
typedef stxxl::vector<vector> vector_2d;
typedef stxxl::vector<vector_2d> vector_3d;
vector_3d numbers(5);
for (auto & rc : numbers){
rc = vector_2d(5);
for (auto & r : rc ){
r = vector(5);
std::generate(r.begin(), r.end(), custom_random);
}
}
for (auto rc : numbers){
for(auto r : rc){
for(auto n : r){
std::cout << n << " ";
}
std::cout << std::endl;
}
std::cout << "-----" << std::endl;
}使用调试器执行程序时,会发现冻结发生在以下行:
vector_3d numbers(5);我正在使用STXXL的1.3.1版本,并用GCC 4.8.1在Linux上编译它。我不知道我在这里错过了什么。将向量更改为STD版本,使其工作。如果将其简化为2D矢量,它也能工作。
编辑:也尝试了STXXL的最新稳定版本(v1.4.0),但没有成功。同样的问题也会发生。
发布于 2014-06-06 16:06:57
根据STXXL常见问题的“参数化STXXL容器”部分,stxxl::vector<stxxl::vector<T> >是一个无效的构造。
STXXL容器只能包含POD类型。
发布于 2015-12-14 17:45:58
我面临着这个问题,简而言之,我应该说,您必须改变对stxxl的看法,然后您可以编写任何您想要的程序,在这种情况下,您可以这样做:
typedef stxxl::vector<std::vector<std::vector<int>>> vector_3d;
vector_3d numbers(5);
vector<vector<int>> a;
vector<int> b;
b.push_back(1);
b.push_back(3);
a.push_back(b);
numbers.push_back(a);您应该知道stxxl的唯一目的是“非常大的内存”管理,因此您应该以stxxl非常大时可以管理的方式编写代码。
https://stackoverflow.com/questions/24085754
复制相似问题