このコードを考慮すると:
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_typevector クラス内の typedef であり、vectorインデックスに使用する型を決定する機会をクラスに与えます。intの最大値は (通常、保証されていませんが、少なくとも 32767 であることが保証されていると思います) 2^31 です。20 億項目を超えるベクトルが必要になる場合があるため (確かにそれほど頻繁ではないと思います)、クラス自体で型を指定すると便利です。
このタイプは、vector実装自体が対処できる範囲をカバーすることが保証されています。大きすぎず ( long long32 ビット システムで使用する場合は、必要以上に大きくなります)、小さすぎません。もちろん、アイテムが 10 個しかないとわかっている場合は、おそらく問題ありません。
また、ほとんどの場合、符号なしの型です。場合によっては、これにより配列のインデックス作成がより効率的になり、パフォーマンスもわずかに向上します。
vector<T>::size_typeのstaticメンバーですstd::vector。混乱を招く可能性があるため、なぜ誰かがそれを使用するのかわかりません。SOですでに回答されているこれを見てください。