問題は、符号付きと符号なしの比較を処理するときに発生する可能性がある潜在的な (重大な) 問題があることです。符号付きが 4 バイトである 32 ビット マシンを使用している場合int
、ベクトルのサイズがその型で表現可能な最大量を超える可能性があります。それが発生すると、符号付きオーバーフローが発生し、結果として未定義の動作が発生します。
使用できるいくつかの代替手段を次に示します。
for (std::vector<classname>::size_type i = 0; i < object.size(); ++i);
が返す型であるため、これは正しいことが保証されていsize
ます。
イテレータ
std::vector<classname>::iterator it;
for (it = object.begin(); it != object.end(); ++it);
for (auto& a : object)
{
// ...
}
for (std::size_t i = 0; i < object.size(); ++i);
doomster がコメントで述べたようにstd::size_t
、基盤となるプラットフォームのビットサイズを持つ可能性があります。
unsigned int
:
for (unsigned int i = 0; i < object.size(); ++i);
注: これを使用することで、 がsize
32 ビット整数を返すと想定しています。通常、これは問題ではありませんが、確信が持てません。可能であれば、上記のいずれかを使用してください。
コードに関するもう 1 つのヒントは、メモリ管理を容易にするためにunique_ptr
/のベクトルを使用することです。shared_ptr
std::vector<std::unique_ptr<classname>> object;