0

このコードを考慮すると:

vector<double> student_grades(20);

for (vector<double>::size_type i = 0; i < student_grades.size(); i++)
{
    cout << i << endl;
}

iだけではなく、このように宣言することの違いは何int i = 0ですか?

4

4 に答える 4

2

int i = 0 だけでなく、このように i を宣言することの正確な違いは何ですか?

これにより、適切な型が使用されることが保証されます。vector<T>::size_type常に と同じであると仮定していますintが、この仮定は正しくありません。unsigned int実装によっては、 、longunsigned longまたはのようなものになることもありますsize_t

を使用するvector<T>::size_typeと、さまざまな実装間でコードの移植性が維持されます。

C++ の vector<int>::size_typeも参照してください。

于 2013-03-13T11:11:21.460 に答える
1

size_typevector クラス内の typedef であり、vectorインデックスに使用する型を決定する機会をクラスに与えます。intの最大値は (通常、保証されていませんが、少なくとも 32767 であることが保証されていると思います) 2^31 です。20 億項目を超えるベクトルが必要になる場合があるため (確かにそれほど頻繁ではないと思います)、クラス自体で型を指定すると便利です。

このタイプは、vector実装自体が対処できる範囲をカバーすることが保証されています。大きすぎず ( long long32 ビット システムで使用する場合は、必要以上に大きくなります)、小さすぎません。もちろん、アイテムが 10 個しかないとわかっている場合は、おそらく問題ありません。

また、ほとんどの場合、符号なしの型です。場合によっては、これにより配列のインデックス作成がより効率的になり、パフォーマンスもわずかに向上します。

于 2013-03-13T11:14:09.173 に答える
0

vector<T>::size_typestaticメンバーですstd::vector。混乱を招く可能性があるため、なぜ誰かがそれを使用するのかわかりません。SOですでに回答されているこれを見てください。

于 2013-03-13T11:12:29.097 に答える
0

size_type は、型ベクトルの (静的) メンバー型です。通常、これは std::size_t の typedef であり、通常はそれ自体が unsigned int または unsigned long long の typedef です。

この質問へのリンク

標準コンテナは、size_type を Allocator::size_type の typedef として定義します (Allocator はテンプレート パラメータです)。std::allocator では size_t と定義されます。

この質問へのリンク

于 2013-03-13T11:12:56.830 に答える