std::vector<T>::size()
は、符号なし整数型のstd::vector<T>::size_type
を返します。あなたが署名されたものと符号なし整数を比較しているので、結果的にタイプint
(すなわち、符号付き整数)である式i < myvec->size()
にi
と比較
、あなたは当然警告を受けます。
この警告を受ける理由は、極値(最大値と最小値)で、符号なし整数が符号付きの整数よりも大きくなる可能性があるためです。コンパイラは、このために発生する可能性のある問題を考慮したかどうかを "尋ねる"/"警告"するために、警告を発行します。
これが問題でない場合は、単にキャストするだけで警告を修正できます。
for(int i(0); i < static_cast<int>(myvec->size()); ++i) {
...
}
もう一つの方法は、myvec->size()
のそれと一致するようにi
の種類を変更するには、次のようになります。
for(std::vector<float>::size_type i(0); i < myvec->size(); ++i) {
...
}
マインドしかし、あなたはループの中でそれを減少している場合i
は、符号なし整数型になっていることをあなた予期しない結果が得られる可能性があります(つまり、負の値は得られません)。
もう一つの方法と、あなたのコンパイラは、C++ 11をサポートし、ベクター自体を変更せずに、あなたのベクトルの要素をループする場合は、範囲ベースのループを使用することですかのように:
for(auto &&e : *myvec) {
...
}
マイベクトルの要素をループのための個人的な好みは、次のとおりです。Cで
for(int i(0), sz(myvec->size()); i <sz; ++i) {
...
}
可能な重複:
別のアプローチは、イテレータを使用することですか?警告が表示されます:符号付きと符号なしの整数式の比較\ [-Wsign-compare \]](http://stackoverflow.com/questions/7984955/what-is-wrong-with-my-for-loops-i-getget -warnings-between-signed-and-u) –
[署名済みと署名なしの比較のような警告をどのように修正できますか?](http://stackoverflow.com/questions/859943/how-can -i-fix-warnings-like-comparison-signed-and-unsigned) –