尝试处理大量数据集时,我一直在使用方便的STXXL库。虽然在尝试使用/生成多维向量时遇到了一些小问题。
以下程序冻结系统一段时间然后被杀死。命令行上没有输出:
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版本并在Linux上使用GCC 4.8.1进行编译。我不确定我在这里缺少什么。将矢量更改为STD版本,使其工作。如果缩小为2D矢量,它也可以工作。
修改: 还尝试了最新稳定版的STXXL(v 1.4.0),但无济于事。出现同样的问题。
答案 0 :(得分:3)
根据STXXL FAQ stxxl::vector<stxxl::vector<T> >
的“参数化STXXL容器”部分是无效的构造。
STXXL容器只能包含POD类型。
答案 1 :(得分:0)
我遇到了这个问题,简而言之,我应该说你必须改变你对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的唯一目的是&#34;非常庞大的内存&#34;管理,所以你应该以stxxl非常大的方式管理你的代码。