algorism

[C++] 범위 기반 for 문

Maison 2024. 1. 19. 20:46

개념)

배열 또는 STL컨테이너에 들어있는 원소들을 순차적으로 접근하기 위해 사용되는 for 문.

사용자 정의 컨테이너로 범위 기반 for문을 돌리기 위해선 std::begin(), std::end()가 구현되어 있어야 함.

 

*STL 컨테이너란?

 - Standard Template Library 컨테이너.

 - C++ 프로그래밍 언어의 표준 라이브러리로, C++에서 사용되는 array, vector등의 여러 구조가 포함된 라이브러리.

 

사용 예)

vector<int> a(3) {1,2,3};

for(int n : a)
{
	cout<<n<<endl;
}

for(auto& n : a)
{
    cout<<n<<endl;
}

for(const auto& n : a)
{
	cout<<n<<endl;
}

 

*범위 기반 for 문에서 사용되는 auto 뒤의 & 사용의 이유.

 

1) auto로 접근시

 - a의 각 원소들이 복사본으로 복사되어 n에 전달되기 때문에 해당 반복문 내에서 실제 a의 값을 변경 할 수 없음.

 

2) auto&로 접근시

 - a의 각 원소들이 n에 참조되기에 범위기반 for문에서 a의 값을 변경할 수 있음.

 

3) const auto&로 접근시

 - a의 각 원소들이 n에 참조되지만, const로 상수화 되기 때문에 값을 변경할 수 없음.

 - read only로 동작됨.

 

 

* vector와 array 선언법

 

 - array<class T, size n>

 - vector<class T>

 

 - 둘의 결정적 차이는원소의 수를 미리 선언해야하는지 여부

 - 변수 선언시, 둘의 자료형의 개념이기 때문에 자료형의 역할로 변수를 선언해야 한다.

 

 사용 예)

 vector<int> vec(10);

 array<int,5> arr;