1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | int num1 = 10; int num2 = 20; vector<int> vint; vint.push_back(num1); vint.push_back(num2); for (auto i : vint) { i++; //여기서 i는 vint의 원소에 "직접" 접근해서 값을 변경 시키는게 아니라, vint의 원소의 값만 복사해서 i에 넣고 i++시켜서 i를 출력 cout << i << endl; } //위의 반복문에서 마치 vint의 값을 i++ 시켜서 변경시킨 것 처럼 보이지만 원소의 값은 그대로 유지됨 ★ for (auto i = vint.begin(); i != vint.end(); ++i) { cout << *i << endl; } | cs |
(auto i : vint)
여기서 num1 메모리에 있는 값인 10을 복사해서 i에 넣으니 i를 변경 시켜도 원소의 실제값이 변하는게 아닌것?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | vector<sky*> vSky; sky *a = new sky; sky *b = new sky; vSky.push_back(a); vSky.push_back(b); //vSky의 원소 a와 b가 i에 들어감, 즉 i는 sky* i = a -> sky* i = b 순서로 백터 원소 범위 내에 순환됨 //여기서 i는 주소값, vSky의 원소의 주소값임(a, b가 가리키는 주소값) //즉 a, b가 푸쉬백으로 들어가서 원소가 됬으니 a와 b가 가리키는 주소값이 차례대로 들어감 for (auto i : vSky) { i->num = 1; cout << i << endl; } | cs |
sky라는 구조체를 만듬
for (auto i : vSky)
여기서는 a의 메모리에 들어 있는 주소값 즉 힙영역 메모리 주소값을 i에 넣어버리니 i로 멤버에 접근해서 변경하면 실제로 바뀌는 것?
여기까지만 하고 자야게따
vint 안에도 값이 복사되어 들어갔고, 값을 바꾸고 싶다면 auto& 로 받으면 됨~
for( auto& i : vint ) 로 돌려보렴~
됬->됐 (되어 = 돼임) [리듬 맞춤법 봇♬]