私は大きな ものを作りたい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;
};
しかし、私が次のことを試してみると:
long long n = 5;
std::vector<int, allocator64<int> > vec(n);
vec[n-1] = 2;
2行目と3行目に次の警告が表示されます。
警告C4244:'引数':'__int64'から'unsigned int'への変換、データが失われる可能性があります
私は何が欠けていますか?operator[]
サイズコンストラクターの型と型はから来るべきだと思いましたallocator::size_type
。
VS9(2008)を使用しています。