그래서 std :: set에서만 이상한 반복기 버그가 발생했습니다 : 반복기에서 (it + 1)과 같은 간단한 작업을 수행 할 수 없습니다. (유효하지 않은 피연산자 바이너리 표현에 ('표준 : _ 1 : _tree_const_iterator의 * 긴>'와 'INT') 경우를 :C++ std :: set가 컴파일러 오류로 인해 반복자에서 operator +를 사용할 수 없습니다.
void setBug()
{
std::set<int> values;
for (auto it = values.cbegin();
it != values.cend(); ++it) {
if ((it + 1) != values.end())
values.insert(*it/*(it + 1));
}
}
오류 : 컴파일 오류이 직접 컴파일하려고 없이 (it + 1)! = values.end())
오류 : 이진 표현식에 잘못된 피연산자 ('std :: _ 1 :: _tree_const_iterator *, long> '및'int ') values.insert (* it/* (it + 1));
버전컴파일러 : 나는 더러운 해결책을 발견 POSIX
: 애플 LLVM 버전 5.0 (그 소리-500.2.79) (LLVM의 3.3svn 기준) 대상 : x86_64에-사과 darwin13.1.0 스레드 모델 : (자동 it2 = ++ it; - it) 작동하지만, 이것은 정말로 더러운 ...
누군가 설명해 주시겠습니까? std :: set가 잘못 되었습니까?
감사합니다.
그것은 양방향 반복기이며 임의 액세스가 아닙니다 –
'auto it2 = it; ++ it2;는 더러운 해결책보다 깨끗합니다. –