[C++/C]Range based for 와 Auto 키워드
2023. 8. 2. 00:27ㆍ프로그래밍 언어/C++\C
Range based for
Range based for문은 알아서 데이터 리스트를 순회하는 for 반복문이다. 일반적인 for문과 달리 사용할 때 순회할 리스트의 index는 넘겨주지 않고 for문 안에서도 사용하지 않는다. 사용법은 예제로 보자.
#include <iostream>
using namespace std;
int main()
{
int arr[] = {0, 1, 2, 3, 4, 5};
for (int i : arr)
{
i += 1;
cout << i << ' '; //출력값 1 2 3 4 5 6
}
cout << arr[0]; //출력값 0
}
자동으로 i에 arr 배열의 값이 차례로 얕은 복사로 할당된다. 따라서 for문이 끝나고 arr [0]의 값을 출력하면 1이 아닌 0이 출력된다.
reference를 이용하여 for문을 사용할 수도 있다. reference를 이용하면 복사 비용도 줄고 배열의 원래 값을 변경할 수 있다는 장점이 있다.
#include <iostream>
using namespace std;
int main()
{
int arr[] = {0, 1, 2, 3, 4, 5};
for (int &i : arr)
{
i += 1;
cout << i << ' '; // 출력값 1 2 3 4 5 6
}
cout << arr[0]; // 출력값 1
}
아까의 예시와는 다르게 for문이 끝나도 arr [0]의 값이 1로 유지된다.
const 키워드 또한 사용 가능하며 reference와 함께 사용 가능 하다.
#include <iostream>
using namespace std;
int main()
{
int arr[] = {0, 1, 2, 3, 4, 5};
for (const int &i : arr)
{
i += 1; //expression must be modifiable lvalue
cout << i << ' ';
}
cout << arr[0];
}
위의 코드에서는 상수 값인 i의 값을 변경하려 했기에 컴파일 에러가 뜬다.
Auto
auto 키워드는 변수를 선언할 때 자료형 대신 사용한다. auto 키워드로 선언한 변수의 초깃값의 형식에 맞춰 인스턴스의 형식을 자동으로 결정한다.
auto d = 5.0;
auto i = 1 + 2;
함수 매개 변수와 함께 사용할 수 없다. 아래의 코드는 작동하지 않는다.
void add(auto x, auto y){
std::cout << x + y;
}
iterator로 작동할 수 있고 const, &, * 키워드와 함께 사용할 수 있다. 이 때문에 range based for에서 많이 사용한다.
for(auto it = v.begin(); it != v.end(); ++it)
*it *= 2;
'프로그래밍 언어 > C++\C' 카테고리의 다른 글
[C++] 문자열의 기초부터 꼭 알아야 할 메서드들까지 (0) | 2023.08.21 |
---|---|
[C++] STL에서의 unordered_map사용법과 map과의 차이점, unordered_set 사용법 (1) | 2023.08.21 |
[C++] Stack, Queue, 우선순위 큐에 구조체 넣는 법 (0) | 2023.08.16 |
[C++] Map, Set 사용하고 구조체까지 넣어보기 (0) | 2023.08.09 |
[C++] Vector, Deque, List는 언제 사용해야할까? (0) | 2023.08.02 |