도저히 이해가 되지 않는 게 있어서 질문드립니다.
우선, vec이랑 *vecptr이랑 같다고 알고 있어서 첫 번째 for문에서 i와 (*vecptr).at(i)를 출력해봤는데 전자는 0이 출력되고 후자는 1만 출력되더라고요. 대체 어떻게 된 일인지 모르겠습니다.
또 뒤에 이어지는 for문에서 값을 0으로 바꿨는데 해당 스코프 내에서만 변경이 되었는지 두 번째 for문을 돌려보니 vec의 값이 그대로더라고요. 혹시 vector만 그런가 해서 array로도 돌려봤는데 결과는 똑같았습니다.
결국 값을 바꾸려면 i가 아니라 vec[i], 혹은 arr[i]를 써야 바뀐다는 걸 확인했는데 왜 그런 건가요???
for(int i : vec)으로 하면 여기서의 i는 원본이 아닌 원본의 복사본이 됩니다. 따라서 복사본의 값을 바꾸어도 원본은 그대로이기 때문에 변화가 없게 됩니다.
늦었지만 답변 감사합니다!
댓글을 작성하려면 로그인해야 합니다.
changwonchun 1년 전
도저히 이해가 되지 않는 게 있어서 질문드립니다.
우선, vec이랑 *vecptr이랑 같다고 알고 있어서 첫 번째 for문에서 i와 (*vecptr).at(i)를 출력해봤는데 전자는 0이 출력되고 후자는 1만 출력되더라고요. 대체 어떻게 된 일인지 모르겠습니다.
또 뒤에 이어지는 for문에서 값을 0으로 바꿨는데 해당 스코프 내에서만 변경이 되었는지 두 번째 for문을 돌려보니 vec의 값이 그대로더라고요. 혹시 vector만 그런가 해서 array로도 돌려봤는데 결과는 똑같았습니다.
결국 값을 바꾸려면 i가 아니라 vec[i], 혹은 arr[i]를 써야 바뀐다는 걸 확인했는데 왜 그런 건가요???