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) –