C++ Chapter 6.16 : for-each 반복문

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


for (auto i : 배열이름)
  • C++ 11부터 지원한다.
  • auto
    • 반복자 i의 데이터 타입.
    • 배열의 타입에 따라 자료형이 결정된다.
  • auto i에 배열의 원소들이 순서대로 대입되어 들어오게 된다.
  • i는 for문 안에서의 지역변수다.


일반 데이터 타입 반복자

int main()
{
	int fibonacci[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };

	for (auto number : fibonacci)
		number *= 10;
	cout << endl;

	return 0;
}
  • auto에 의해 number의 타입은 int로 추론된다.
  • fibonacci 배열의 원소들이 인덱스 순서대로 number복사 된다.
    • 배열의 크기가 클 경우 시간이 오래 걸리고 공간이 낭비될 수 있음.
  • number는 단순히 각각의 원소들을 복사한 값이기 때문에 number *= 10 해주어도 fibonacci 배열의 원래 원소들의 값에는 변함이 없다.


참조 반복자

int main()
{
	int fibonacci[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };

	for (auto & number : fibonacci)
		number *= 10;
	cout << endl;

	return 0;
}
  • auto에 의해 number의 타입은 int로 추론된다.
  • fibonacci 배열의 원소들이 인덱스 순서대로 number참조 된다.
    • 복사되는 과정 없이 number 그 자체가 차례대로 fibonacci 원소들과 메모리를 공유하게 된다.
      • 복사되는 과정이 없으므로 빠르다.
    • 따라서 number *= 10;해주면 실제 fibonacci 배열의 원소들도 값이 전부 변하여 {0, 10, 10, 20, 30, 50, 80, 130, 210, 340, 550, 890} 으로 원소 값들이 변하게 된다.

const 참조 반복자

int main()
{
	int fibonacci[] = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };

	for (const auto & number : fibonacci)
		cout << number << endl;
	cout << endl;

	return 0;
}
  • const 참조는 참조하는 대상의 값을 변경할 수 없다.
    • 원소의 값을 변경하지 못하도록 막을땐 const를 써주자
    • 성능 문제로 반복자 타입을 참조로 하려 하는데 원소 값은 못바꾸게 하고 싶을 때 사용


동적 배열은 for-each문을 쓸 수 없으나 vector는 for-each문을 쓸 수 있다.

  • 동적 배열 (new로 할당된 )을 for-each 문에 돌릴 순 없다.
  • 그러나 std::vector는 for-each 문안에서 돌릴 수 있다.
    • vector는 동적할당을 아주 편리하게 쓰기 위해 std에 구현되어 있는 자료구조.
#include<iostream>
#include <limits>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
	vector<int> fibonacci = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89 };

	for (const auto & n : fibonacci)
		cout << number << endl;
    cout << endl;

	return 0;
}


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기