글
range base for에서 데이터셋의 요소를 변경할 수 있을까요?
정답은 있을 수도 있고, 없을 수도 있습니다.
앞 선 예제 코드에서는
for( auto i : NumberList )
이런 식으로 사용했는데 이런 경우 i의 값을 for 문 안에서 변경 할 수 있지만 for 문을 나오면 NumberList의 요소에는 적용되지 않습니다.
만약 요소의 값을 변경하고 싶다면 참조를 사용하면 됩니다. 즉
for( auto &i : NumberList )
이런 식으로 하면 for 문을 나와도 NumberList의 요소는 변경이 적용되어 있습니다.
그런데 만약 for 문에서 요소 값을 변경하지 못하도록 하려면 const를 사용합니다.
for( auto const i : NumberList )
또 for 문에서 데이터셋 요소를 접근할 때는 임시 변수를 만들기 때문에 이 비용을 줄이고 싶다면 참조를 사용하면 좋습니다.
또 만약 요소의 값을 변경하지 못하도록 하고 싶다면 const 참조를 사용합니다.
for( auto const &i : NumberList )
< 예제. 3 >
#include <iostream>
#include <vector>
int main()
{
std::vector<int> NumberList;
NumberList.push_back( 1 );
NumberList.push_back( 2 );
NumberList.push_back( 3 );
for( auto i : NumberList )
{
std::cout << i << " * 10 : ";
i *= 10;
std::cout << i << std::endl;
}
for( auto i : NumberList )
{
std::cout << i << " ";
}
std::cout << std::endl << std::endl;
for( auto &i : NumberList )
{
std::cout << i << " * 10 : ";
i *= 10;
std::cout << i << std::endl;
}
for( auto i : NumberList )
{
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
< 실행 결과 >
RECENT COMMENT