C++ Chapter 6.16 : for-each 반복문
Categories: Cpp
Tags: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 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} 으로 원소 값들이 변하게 된다.
- 복사되는 과정 없이 number 그 자체가 차례대로 fibonacci 원소들과 메모리를 공유하게 된다.
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;
}
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
Leave a comment