Updated:

1 minute read

개요

  • reference
  • 알고리즘 및 반복자 라이브러리에 대한 확장 및 일반화 구성 및 안정화
    • auto 혹은 ranged for와 같은 효과
    • | 연산자 오버로딩이 되어 있어 간결하고 직관적인 코드 작성 가능
    • 정통적인 함수 호출 방식도 사용 가능


예제

  • 코드
     #include <iostream>
     #include <ranges>
        
     using namespace std;
        
     int main() {
     	auto v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        
     	for (const auto &iter : v | views::reverse) {
     		cout << iter << " ";
     	}
     	cout << endl;
        
     	for (const auto &iter : v) {
     		cout << iter << " ";
     	}
     	cout << endl;
        
     	cout << "------" << endl;
        
     	for (const auto &iter : v | views::filter([](int i) { return i % 2; }) |
     								views::transform([](int i) { return i * 2; }) |
     								views::take(3)) {
     		cout << iter << " ";
     	}
     	cout << endl;
        
     	cout << "------" << endl;
        
     	for (const auto &iter : views::take(
     			 views::transform(views::filter(v, [](int i) { return i % 2; }),
     							  [](int i) { return i * 2; }),
     			 3)) {
     		cout << iter << " ";
     	}
     	cout << endl;
        
     	cout << "------" << endl;
        
     	for (const auto &iter : v) {
     		cout << iter << " ";
     	}
     	cout << endl;
        
     	return 0;
     }
    
  • 실행 결과
     9 8 7 6 5 4 3 2 1
     1 2 3 4 5 6 7 8 9
     ------
     2 6 10
     ------
     2 6 10
     ------
     1 2 3 4 5 6 7 8 9