본문 바로가기

개발자/C++(Linux, Window)

C++ : 범위 기반 for 반복문

반응형

범위 기반 for 반복문

int scores[3] = { 10, 20, 30};

for ( int score : scores)
{
  std::cout << scores << " " << std::endl;
}

 

for 반복문을 더 간단하게 쓸 수 있습니다. 가독성이 더 높습니다. STL 컨테이너와 C 스타일 배열 모두에서 작동합니다.

auto 키워드를 범위 기반 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문을 활용하면 가독성도 높이고 깔끔하게 구현이 가능합니다. 

반응형