2017-03-02 1 views
0

아래의 두 코드 스 니펫이 다른 결과를 갖는 이유는 무엇입니까? 정수의 벡터 인 자리수 앞에 1을 더하고 싶습니다. 그러나 두 번째 스 니펫은 제대로 바뀌지 않습니다.이 스왑 방식이 작동하지 않는 이유는 무엇입니까?

int tmpInt(1); 
for (int i=0; i<digits.size(); i++){ 
    swap(tmpInt, digits[i]); 
} 
digits.push_back(tmpInt); 

대 그래서

int tmpInt(1); 
for (auto it : digits){ 
    swap(tmpInt, it); 
} 
digits.push_back(tmpInt); 
+0

수사적 :

은 첫 번째 예와 동등한 결과를 얻기 위해, 기준을 사용해야'INT X = 6; int y = x; y = 4; // 왜 x가 여전히 4 대신에 6입니까? – immibis

+0

"it"은 반복자가 아니므로 이름을 변경하려고한다고 생각합니다. –

답변

4
for (auto it : digits){ 

범위 변수 본질적 시퀀스에서 값 복사 얻는다

swap(tmpInt, it); 

이 모든 tmpInt와 사이에 교환되는 다하고 임시 범위 변수.

for (auto &it : digits){ 
    swap(tmpInt, it); 
관련 문제