std::ranges:: owning_view
|
헤더에 정의됨
<ranges>
|
||
|
template
<
ranges::
range
R
>
requires
std::
movable
<
R
>
&&
(
!
/*is-initializer-list*/
<
R
>
)
|
(C++20 이후) | |
owning_view
는
view
가
range
에 대한 독점적인 소유권을 가지는 뷰입니다. 이는 이동 전용(move-only)이며 해당
range
를 내부에 저장합니다.
/*is-initializer-list*/ < R > 상수는 requires 절에서 true 인 경우에만, 그리고 그 경우에 std:: remove_cvref_t < R > 가 std::initializer_list 의 특수화(specialization)일 때입니다.
데이터 멤버
| 멤버 | 설명 |
R
r_
|
기반 범위
( 설명 전용 멤버 객체* ) |
멤버 함수
owning_view
를 값 초기화하거나 이동 생성하여 저장된 범위를 구성합니다
(public member function) |
|
|
저장된 범위를 이동 할당합니다
(public member function) |
|
|
저장된 범위에 대한 참조를 반환합니다
(public member function) |
|
|
저장된 범위의 시작 반복자를 반환합니다
(public member function) |
|
|
저장된 범위의 센티널을 반환합니다
(public member function) |
|
|
저장된 범위가 비어 있는지 확인합니다
(public member function) |
|
저장된
sized_range
의 크기를 반환합니다
(public member function) |
|
|
(C++26)
|
저장된
approximately_sized_range
의 대략적인 크기를 반환합니다
(public member function) |
저장된
contiguous_range
의 시작 부분에 대한 포인터를 반환합니다
(public member function) |
|
std::ranges::view_interface 로부터 상속됨 |
|
|
(C++23)
|
범위의 시작을 가리키는 상수 반복자를 반환합니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
(C++23)
|
범위의 상수 반복자에 대한 센티널을 반환합니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰가 비어 있지 않은지 반환합니다.
ranges::empty
가 적용 가능한 경우에만 제공됩니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰의 첫 번째 요소를 반환합니다.
forward_range
를 만족하는 경우에 제공됩니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰의 마지막 요소를 반환합니다.
bidirectional_range
와
common_range
를 만족하는 경우에만 제공됩니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰의
n
번째
요소를 반환합니다.
random_access_range
를 만족하는 경우에만 제공됩니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
std::ranges::owning_view:: owning_view
|
owning_view
(
)
requires
std::
default_initializable
<
R
>
=
default
;
|
(1) | (since C++20) |
|
owning_view
(
owning_view
&&
other
)
=
default
;
|
(2) | (since C++20) |
|
constexpr
owning_view
(
R
&&
t
)
;
|
(3) | (since C++20) |
매개변수
| other | - |
이동할 다른
owning_view
|
| t | - | 이동할 범위 |
참고 사항
owning_view
은 명시적으로 복사 생성자를 정의하지 않습니다.
owning_view
은 이동 전용입니다.
std::ranges::owning_view:: operator=
|
owning_view
&
operator
=
(
owning_view
&&
other
)
=
default
;
|
(C++20 이후) | |
이동 할당 연산자.
r_
를
other
의 것으로 이동 할당합니다.
매개변수
| other | - |
이동할 다른
owning_view
|
반환값
* this
참고
owning_view
는 복사 할당 연산자를 명시적으로 정의하지 않습니다.
owning_view
는 이동 전용(move-only)입니다.
std::ranges::owning_view:: base
|
constexpr
R
&
base
(
)
&
noexcept
;
|
(1) | (C++20 이후) |
|
constexpr
const
R
&
base
(
)
const
&
noexcept
;
|
(2) | (C++20 이후) |
|
constexpr
R
&&
base
(
)
&&
noexcept
;
|
(3) | (C++20 이후) |
|
constexpr
const
R
&&
base
(
)
const
&&
noexcept
;
|
(4) | (C++20 이후) |
저장된 범위에 대한 참조를 반환하며, 값 범주와 const 한정자를 유지합니다.
반환 값
r_
r_
)
std::ranges::owning_view:: begin
|
constexpr
ranges::
iterator_t
<
R
>
begin
(
)
;
|
(1) | (since C++20) |
|
constexpr
auto
begin
(
)
const
requires
ranges::
range
<
const
R
>
;
|
(2) | (since C++20) |
ranges::begin(r_)
를 반환합니다.
std::ranges::owning_view:: end
|
constexpr
ranges::
sentinel_t
<
R
>
end
(
)
;
|
(1) | (since C++20) |
|
constexpr
auto
end
(
)
const
requires
ranges::
range
<
const
R
>
;
|
(2) | (since C++20) |
r_
에 대해
ranges::
end
(
r_
)
를 반환합니다.
std::ranges::owning_view:: empty
|
constexpr
bool
empty
(
)
requires requires
{
ranges::
empty
(
r_
)
;
}
;
|
(1) | (C++20 이후) |
|
constexpr
bool
empty
(
)
const
requires requires
{
ranges::
empty
(
r_
)
;
}
;
|
(2) | (C++20 이후) |
ranges::
empty
(
r_
)
을 반환합니다.
std::ranges::owning_view:: size
|
constexpr
auto
size
(
)
requires
ranges::
sized_range
<
R
>
;
|
(1) | (C++20 이후) |
|
constexpr
auto
size
(
)
const
requires
ranges::
sized_range
<
const
R
>
;
|
(2) | (C++20 이후) |
r_
에 대해
ranges::
size
(
r_
)
을 반환합니다.
std::ranges::owning_view:: reserve_hint
|
constexpr
auto
reserve_hint
(
)
requires ranges :: approximately_sized_range < R > ; |
(1) | (since C++26) |
|
constexpr
auto
reserve_hint
(
)
const
requires ranges :: approximately_sized_range < const R > ; |
(2) | (since C++26) |
ranges::reserve_hint(r_)
를 반환합니다.
std::ranges::owning_view:: data
|
constexpr
auto
data
(
)
requires
ranges::
contiguous_range
<
R
>
;
|
(1) | (C++20 이후) |
|
constexpr
auto
data
(
)
const
requires
ranges::
contiguous_range
<
const
R
>
;
|
(2) | (C++20 이후) |
ranges::
data
(
r_
)
를 반환합니다.
헬퍼 템플릿
|
template
<
class
T
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
owning_view
<
T
>>
=
|
(C++20부터) | |
ranges::
enable_borrowed_range
의 이 특수화는
owning_view
가 기본 범위가 이를 만족할 때
borrowed_range
를 만족하도록 합니다.
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_ranges_reserve_hint
|
202502L
|
(C++26) |
ranges::approximately_sized_range
및
reserve_hint
|
예제
#include <cassert> #include <iostream> #include <ranges> #include <string> int main() { using namespace std::literals; std::ranges::owning_view ov{"cosmos"s}; // 추론된 R의 타입은 std::string; // "ov"는 이 문자열의 유일한 소유자 assert( ov.empty() == false && ov.size() == 6 && ov.size() == ov.base().size() && ov.front() == 'c' && ov.front() == *ov.begin() && ov.back() == 's' && ov.back() == *(ov.end() - 1) && ov.data() == ov.base() ); std::cout << "sizeof(ov): " << sizeof ov << '\n' // 일반적으로 sizeof(R)과 동일 << "range-for: "; for (const char ch : ov) std::cout << ch; std::cout << '\n'; std::ranges::owning_view<std::string> ov2; assert(ov2.empty()); // ov2 = ov; // 컴파일 타임 오류: 복사 할당 연산자가 삭제됨 ov2 = std::move(ov); // 정상 assert(ov2.size() == 6); }
가능한 출력:
sizeof(ov): 32 range-for: cosmos
참고 항목
|
(C++20)
|
다른
range
의 원소들을 참조하는
view
(클래스 템플릿) |
|
(C++20)
|
range
의 모든 원소를 포함하는
view
(별칭 템플릿) (범위 어댑터 객체) |