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;

}

 

< 실행 결과 >




저작자 표시
신고
by 흥배 2012.09.26 01:07