728x90
Ranges는 STL에서 제공되던 iterator의 확장 버전처럼 보인다.
Range : STL 컨테이너를 순회할 수 있는 그룹
View : Range에 대해서 적용할 수 있는 연산
C#의 LINQ 문법과 비슷하다.
키워드
// std::views::all
// std::ranges::filter_view / std::views::filter (조건 만족하는거 추출)
// std::ranges::transform_view / std::views::transform (각 요소를 변환)
// std::ranges::take_view / std::views::take (n개 요소를 추출)
// std::ranges::take_while_view / std::views::take_while (조건 만족할 때까지 요소 추출)
// std::ranges::drop_view / std::views::drop (n개 요소를 스킵)
// std::ranges::drop_while_view / std::views::drop_while (조건 만족할 때까지 요소 스킵)
// std::ranges::join_view / std::views::join (view 를 병합)
// std::ranges::split_view / std::views::split (split)
// std::ranges::reverse_view / std::views::reverse (역순서로 순회)
// std::ranges::elements_view / std::views::elements (튜플의 n번째 요소를 대상으로 view 생성)
// std::ranges::keys_view / std::views::keys (pair-like value의 첫번째 요소를 대상으로 view 생성)
// std::ranges::values_view / std::views::values (pair-like value의 두번째 요소를 대상으로 view 생성)
벡터의 값들 중에 짝수를 추출해서 2를 곱해준다는 것을 코드로 구현한다면
예전 코드
vector<int> v1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
vector<int> v2;
// 짝수를 추출해서
for (int n : v1)
if (n % 2 == 0)
v2.push_back(n);
// 2를 곱해준다
for (int& n : v2)
n = n * 2;
view를 이용한 코드
vector<int> v1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
auto results = v1 | std::views::filter([](int n) { return n % 2 == 0; })
| std::views::transform([](int n) { return n * 2; });
정렬 방법
vector<int> v1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::sort(v1.begin(), v1.end()); // 예전 방식
std::ranges::sort(v1); // range를 이용한 방식
ref - https://openmynotepad.tistory.com/87
https://openmynotepad.tistory.com/88
728x90
'Basic Programming > C++ 20' 카테고리의 다른 글
C++20 - 지정된 초기화 (Designated Initialization) (1) | 2023.12.17 |
---|---|
C++20 - 삼항 비교 연산자(Three-Way Comparison) (0) | 2023.12.17 |
C++20 - Coroutine (1) | 2023.12.17 |
C++20 - Module (0) | 2023.12.10 |
C++20 - Concepts (0) | 2023.12.10 |