ranges 3

C++20 : std::ranges #3 - range 를 컨테이너로 변환하기

요약 지금은 방법이 없다. ranges::common_view 가 VS에 구현될 때까지 다음 함수를 정의해서 쓰자. template requires std::ranges::range auto toVector(Rng& rng) { std::vector v; if constexpr (std::ranges::sized_range) { v.reserve(std::ranges::size(rng)); } std::ranges::copy(rng, std::back_inserter(v)); return v; } 서론 2021년 3월, VS2019 를 기준으로 포스팅을 하다보니, 아쉬운 점이 많다. 컨테이너를 range 로 변환할 때에는 다음과 같이 views::all() 을 사용하면 되니 간단하다. std::vecto..

C++ 2021.03.24

C++20 : std::ranges #2 - iota_view 만들기

2022.11.27 추가 - VS2022에 std::ranges::views::iota() 가 구현되었다. 이제 다음과 같은 코드를 작성할 수 있다. auto v = std::ranges::views::iota(0) | std::ranges::views::take(3); VS2019 에 구현되지 않은 iota_view 를 간단하게나마 구현하면서 커스텀 range 를 만드는 방법을 간략히 알아보자. 참고로, 표준에서 구현될 예정인 iota_view 의 실제 구현 방식은 다음 문서에서 확인할 수 있다. isocpp.org/files/papers/p0789r0.pdf 만들고자 하는 것 : iota_view 먼저, iota_view 가 어떤 식으로 동작해야 하는지를 알아보자. 헤더에 구현되어 있는 std::io..

C++ 2021.03.22

C++20 : std::ranges #1 - views

std::ranges 가 드디어 c++20 에서 표준화 되었으나, github.com/ericniebler/range-v3 에서 구현됐던 내용의 일부만 들어오거나 다른 부분들이 있어, 이번 기회에 VS2019에 구현된 내용들만 정리해보고자 한다. 현재 사용중인 VS버전은 다음과 같다. Visual Studio Community 2019 - 16.8.5 라이브러리는 16.6버전에서 최초로 릴리즈 되었으므로 혹시 버전이 위 버전보다 낮다면, 업데이트를 해야 한다. VS에서 라이브러리 등의 c++20 피쳐를 사용하려면, 프로젝트 속성에서 다음 옵션을 줘야 한다. VS2019에 구현되어있는 views views::single views::all views::filter views::transform views:..

C++ 2021.03.17