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;