如何创建64位索引的std :: vector?

Mot*_*tti 2 c++ 64-bit stl allocator visual-studio-2008

我想创建一个大的 std::vector所以operator[]应该收到long long而不是unsigned int,我尝试编写自己的分配器:

template <typename T>
struct allocator64 : std::allocator<T> {
    typedef long long difference_type;
    typedef unsigned long long size_type;
};
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试以下内容时:

long long n = 5;
std::vector<int, allocator64<int> > vec(n);
vec[n-1] = 2;
Run Code Online (Sandbox Code Playgroud)

我收到第二行和第三行的以下警告:

警告C4244:'argument':从'__int64'转换为'unsigned int',可能会丢失数据

我错过了什么?我认为operator[]大小构造函数的类型和来源应该来自allocator::size_type.

我正在使用VS9(2008).

Dir*_*tel 8

也许STXXL库可以提供帮助:

STXXL使用抽象层向存储设备提供STL替换,以实现数据结构的最佳布局.这允许在标准C++数据结构中保存和操纵多TB数据集,同时抽象出有效管理此行为的复杂性.STXXL利用多磁盘I/O来加速I/O绑定计算.STXXL是在卡尔斯鲁厄大学开发的.