STXXL多维向量使程序冻结

时间:2014-06-06 15:39:55

标签: c++ vector multidimensional-array stxxl

尝试处理大量数据集时,我一直在使用方便的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),但无济于事。出现同样的问题。

2 个答案:

答案 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非常大的方式管理你的代码。