반응형
범위 기반 for 반복문
int scores[3] = { 10, 20, 30};
for ( int score : scores)
{
std::cout << scores << " " << std::endl;
}
for 반복문을 더 간단하게 쓸 수 있습니다. 이전의 for 반복보다 가독성이 더 높습니다. STL 컨테이너와 C 스타일 배열 모두에서 작동합니다. auto 키워드를 범위 기반 for 반복에 쓸 수 있습니다. 컨테이너/배열을 역순회할 수 없습니다.
for_each() ??
#include <algorithm>
#include <iostream>
#include <string>
#include <unordered_map>
int main()
{
std::unordered_map<std::string, int> scores;
scores["lulu"] = 70;
scores["chris"] = 50;
scores["monica"] = 100;
auto printElement = [](std::unodered_map<std::string, int>::value_type& item)
{
std::cout << item.first << " : " << item.second << std::endl;
};
for_each(scores.begin(), scores.end(), printElement);
return 0;
}
C++03 컨테이너의 각 요소마다 함수를 실행하는 알고리듬입니다. 범위 기반 for 만큼 가독성이 높지 않습니다. 이러한 방식으로 활용하기 보다는 범위기반 for가 훨씬 좋은 것 같습니다.
값, 참조, const
std::map<std::string int> scoreMap;
for(auto score : scoreMap)
{
score.second -= 10;
std::cout << score.first << " : " << score.second << std::endl;
}
for(auto& score : scoreMap)
{
score.second -= 10;
std::cout << score.first << " : " << score.second << std::endl;
}
for(const auto& score : scoreMap)
{
score.second -= 10;
std::cout << score.first << " : " << score.second << std::endl;
}
범위 기반 반복문을 사용할 때, 실제 변수 값을 변경하기 위해서는 참조를 넣어주어야 합니다. 그렇지 않은 경우에는 const를 넣어주거나 값만 넣어주어도 무방합니다.
예제
#include <vector>
#include <iostream>
#include "RangeBasedForLoopExample.h"
using namespace std;
namespace samples
{
void RangeBasedForLoopExample()
{
vector<int> nums;
nums.reserve(5);
nums.push_back(1);
nums.push_back(2);
nums.push_back(3);
nums.push_back(4);
nums.push_back(5);
for (int n : nums)
{
n++;
}
cout << "Print nums:" << endl;
for (auto it = nums.begin(); it != nums.end(); ++it)
{
cout << *it << endl;
}
for (int& n : nums)
{
n--;
}
cout << "Print nums again:" << endl;
for (auto it = nums.begin(); it != nums.end(); ++it)
{
cout << *it << endl;
}
}
}
range based for문과 일반적인 반복자를 활용한 for문에 대한 예제입니다. 범위 기반 for문을 쓸 수 있는 경우에는 이러한 for문을 활용하면 가독성도 높이고 깔끔하게 구현이 가능합니다. 해당 원본 코드는 아래 경로에서 확인할 수 있습니다.
https://github.com/POCU/COMP3200CodeSamples/blob/master/11/RangeBasedForLoopExample.cpp
반응형
'SW > C++' 카테고리의 다른 글
C++ : unique_ptr : 유니크 포인터 개념, 필요성, 장점, 활용법 (0) | 2020.05.04 |
---|---|
C++ : std::array : 개념, 장점, 단점, 필요성, 활용성, 예제, 구현 (0) | 2020.05.03 |
C++ : unordered_set : 개념, 차이점, 장점, 예제, 구현 (0) | 2020.05.01 |
C++ : unordered_map : 개념, 장점, 예제, 구현 (0) | 2020.04.30 |
C++ : 람다식 : 장점, 단점, 배스트 프랙티스, 예제, 구현 (0) | 2020.04.29 |