我想創建一個大std::vector
所以operator[]
應該接受long long
而非unsigned int
,我試着寫我自己的分配器:如何創建64位索引的std :: vector?
template <typename T>
struct allocator64 : std::allocator<T> {
typedef long long difference_type;
typedef unsigned long long size_type;
};
但是,當我嘗試以下方法:
long long n = 5;
std::vector<int, allocator64<int> > vec(n);
vec[n-1] = 2;
我得到對於第二和第三行以下警告:
警告C4244:'argument':從'__int64'轉換爲'unsigned int',可能丟失數據
我在想什麼?我認爲operator[]
和尺寸構造函數的類型應該來自allocator::size_type
。
我使用VS9(2008)。
我相信你需要一個編譯器,其中size_t是64位 – KitsuneYMG 2009-12-20 14:52:30
爲什麼你需要超過40億個索引?我認爲你可能需要重新考慮你的設計。 – user230821 2009-12-20 18:18:14