2010-04-28 3 views

답변

12

수정하지 말아야합니다.

for (size_t i = 0; i < blahs.size(); ++i) 

당신은 또한 unsigned를 사용할 수 있지만 size_t 여기에 더 적합 (그리고 다른, 더 큰 범위를 가질 수있다) : 부호없는 형식을 사용합니다.

for (auto iter = blahs.begin(), end = blahs.end(); iter != end; ++iter) 

를 컴파일러가 auto를 지원하지 않는 경우, T가있다 T::iterator 또는 T::const_iteratorauto 교체 : 당신은 단지 반복 루프에서 값을 필요로하지 않는 대신 반복자를 사용 i를 사용하는 경우 blahs 유형 컴파일러가 C++ 11의 더 완전한 하위 집합을 지원한다면 다음과 같이하십시오 :

for (auto& element : blahs) 

어느 것이 가장 좋습니다.


엄밀히 말하면 위의 내용은 "정확하지 않은"것입니다. 그것은해야한다 :

typedef std::vector<Blah> blah_vec; 
blah_vec blahs; 

for (blah_vec::size_type i = 0; i < blahs.size(); ++i) 

그러나 이것은 자세한 될 수 있으며, 내가 아는 모든 구현은 어쨌든 size_typesize_t를 사용합니다. 어떤 이유로 당신이 정말로 i의 부호있는 정수 유형을해야하는 경우


, 당신은 캐스팅해야합니다 :

// assumes size() will fit in an int 
for (int i = 0; i < static_cast<int>(blahs.size()); ++i) 

// assumes i will not be negative (so use an unsigned type!) 
for (int i = 0; static_cast<size_t>(i) < blahs.size(); ++i) 

// and the technically correct way, assuming i will not be negative 
for (int i = 0; static_cast<blah_vec::size_type>(i) < blahs.size(); ++i)