その先にあるもの…

[C++]Range based for loop 본문

프로그래밍

[C++]Range based for loop

specialJ 2016. 6. 8. 17:30

   int numberList[5] = { 1, 2, 3, 4, 5 };

for (int i = 0; i < 5; ++i)

{

std::cout << numberList[i] << std::endl;

}


for each(auto i in numberList)

{

std::cout << i << std::endl;

}


std::list< int > stdListNumber; <-numberList와 같은 값이 들어 있다.

   for (auto iter : stdListNumber)

{

std::cout << iter << std::endl;

}


std::map< int, std::string >  numString;

char buffer[10] = {};

for (int i = 0; i < 10; ++i)

{

numString.insert (STD::pair<int, std::string>(i, std::string("string")));

}


for (auto i : numString)

{

std::cout << "key : " << i.first << ", Value : " << i.second.c_str() << std::endl;

}





class CRangeBase

{

int i = 0;

public:

int j = 0;

CRangeBase(int i) { this->i = i; j = i; }

int GetReturn() { return i; }

};

   CRangeBase rangeBase[10] = { 1,2,3,4,5,6,7,8,9,10 };


   //rangeBase가 복사 되어 i에 들어간다.

for( auto i : rangeBase )

{

i.j = 0;

std::cout << "class member value j : " << i.j << std::endl;

}


// 값이 바뀌지 않았다.

for (auto i : rangeBase)

std::cout << "class member value j : " << i.j << std::endl;


//복사 방식이 아닌 참조방식

for (auto& i : rangeBase)

{

i.j = 0;

std::cout << "class member value j : " << i.j << std::endl;

}

//값이 바뀌었다.

for (auto i : rangeBase)

std::cout << "class member value j : " << i.j << std::endl;



//값 변경 방지

for (auto const i : rangeBase)

{

i.j = 0; //error

std::cout << "class member value j : " << i.j << std::endl;

}

//값 변경 및 복사 방지

for (auto const &i : rangeBase)

{

i.j = 0; //error

std::cout << "class member value j : " << i.j << std::endl;

}


참조

http://bunhere.tistory.com/411

http://www.slideshare.net/jacking/modern-c-cpp11-14

'프로그래밍' 카테고리의 다른 글

[C++] default delete  (0) 2016.06.08
[C++]초기화 리스트  (0) 2016.06.08
[C++] auto C++11  (0) 2016.06.08
[C++] 유니코드로 변경하기  (0) 2016.05.10
[C++] WideCharToMultiByte MultiByteToWideChar  (0) 2016.02.04
Comments