- Visual Basic/C#/C++ 의 for each 와 유사하나 더 편리하게 사용이 가능하다.
- STL Container들은 모두 지원한다.
- 개인적으로 만든 class에 사용하고 싶다면, ++, !=, * 연산이 있는 iterator를 구현하여 begin, end 함수를 통해 호출 할 수 있어야 한다.
std::vector<CString> v { _T("John Snow"), _T("Luna Star"), _T("Orange Chakra") }; for (int i = 0; i < v.size(); i++) // for
{
std::cout << v[i] << std::endl;
}
for each (CString s in v) // for each
{
std::cout << s << std::endl;
}
for (auto a : v) // range-based for
{
std::cout << a << std::endl;
}
|
std::unordered_map<int, CString> mStr; // Casting pair<const int, ATL::CString> to pair<int , ATL::CString>for (std::pair<int, CString> p: mStr)
{
std::cout << "Key : " << p.first << " , Value : "<< p.second << std::endl;
}
for (auto t : mStr) // pair<const int, ATL::CString>
{
std::cout << "Key : " << t.first << " , Value : "<< t.second << std::endl;
}
|
위 예제에서 unordered_map에서의 tuple 하나의 형태는 pair<const int, CString> 이다. int 앞에 const를 빼먹었다가는 서로 다른 형태의 pair 끼리 Casting 을 하고 복사를 하는 과정을 계속 반복해야 하므로 Casting 연산 시간, 복사에 필요한 임시 메모리 할당 및 해제 시간까지 다 감당해야 한다.
auto 변수에 대하여 복사 연산이나 읽기 전용 등에 대한 제약을 걸어주는 방법은 간단하다.
for (auto &t : mStr); // Don't Copy
for (auto const t : mStr); // Can't Modify
for (auto const &t : mStr); // Don't Copy & Can't Modify
|
일반적인 C++ 문법 그대로니깐
더욱 자세한 설명를 보고 싶으면 아래 Site를 참조하면 된다. 물론 순수 100% 영어다.
http://www.cprogramming.com/c++11/c++11-ranged-for-loop.html
댓글 없음:
댓글 쓰기