このコードを考慮すると:
vector<double> student_grades(20);
for (vector<double>::size_type i = 0; i < student_grades.size(); i++)
{
cout << i << endl;
}
i
だけではなく、このように宣言することの違いは何int i = 0
ですか?
int i = 0 だけでなく、このように i を宣言することの正確な違いは何ですか?
これにより、適切な型が使用されることが保証されます。vector<T>::size_type
常に と同じであると仮定していますint
が、この仮定は正しくありません。unsigned int
実装によっては、 、long
、unsigned long
またはのようなものになることもありますsize_t
。
を使用するvector<T>::size_type
と、さまざまな実装間でコードの移植性が維持されます。
C++ の vector<int>::size_typeも参照してください。
size_type
vector クラス内の typedef であり、vector
インデックスに使用する型を決定する機会をクラスに与えます。int
の最大値は (通常、保証されていませんが、少なくとも 32767 であることが保証されていると思います) 2^31 です。20 億項目を超えるベクトルが必要になる場合があるため (確かにそれほど頻繁ではないと思います)、クラス自体で型を指定すると便利です。
このタイプは、vector
実装自体が対処できる範囲をカバーすることが保証されています。大きすぎず ( long long
32 ビット システムで使用する場合は、必要以上に大きくなります)、小さすぎません。もちろん、アイテムが 10 個しかないとわかっている場合は、おそらく問題ありません。
また、ほとんどの場合、符号なしの型です。場合によっては、これにより配列のインデックス作成がより効率的になり、パフォーマンスもわずかに向上します。
vector<T>::size_type
のstatic
メンバーですstd::vector
。混乱を招く可能性があるため、なぜ誰かがそれを使用するのかわかりません。SOですでに回答されているこれを見てください。