Lưu ý
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử đăng nhập hoặc thay đổi thư mục.
Cần có ủy quyền mới truy nhập được vào trang này. Bạn có thể thử thay đổi thư mục.
A view that references the elements that belong to another range.
Syntax
template<std::ranges::range R>
requires std::is_object_v<R>
class ref_view : public ranges::view_interface<ref_view<R>>;
Template parameters
R
The range to reference.
Members
| Member functions | Description |
|---|---|
| ConstructorsC++20 | Construct a ref_view. |
baseC++20 |
Get a reference to the underlying range. |
beginC++20 |
Get an iterator to the first element. |
dataC++20 |
Get a pointer to the first element in the referenced range. |
emptyC++20 |
Test whether this ref_view is empty. |
endC++20 |
Get the sentinel at the end of this ref_view. |
sizeC++20 |
Get the number of elements. The underlying range must satisfy sized_range. |
Inherited from view_interface |
Description |
backC++20 |
Get the last element. |
frontC++20 |
Get the first element. |
operator[]C++20 |
Get the element at the specified position. |
operator boolC++20 |
Test whether this ref_view isn't empty. |
View characteristics
For a description of the following entries, see View class characteristics
| Characteristic | Description |
|---|---|
| Range adaptor | views::all or views::common |
| Underlying range | Must satisfy input_range |
| Element type | Same as the underlying range |
| View iterator category | Same as the underlying range |
| Sized | Only if the underlying range satisfies sized_range |
Is const-iterable |
Yes |
| Common range | Only if the underlying range satisfies common_range |
| Borrowed range | Yes |
Requirements
Header: <ranges> (since C++20)
Namespace: std::ranges
Compiler Option: /std:c++20 or later is required.
Constructors
Construct an instance of a ref_view
// construct a ref_view from a range
template<different-from<ref_view> R>
constexpr ref_view(R&& rg);
Parameters
rg
The range to reference.
For information about the template parameter type, see Template parameters.
Return value
A ref_view instance.
Remarks
The best way to create a ref_view is by using the views::all range adaptor. Range adaptors are the intended way to create view classes. The view types are exposed in case you want to create your own custom view type.
A ref_view is useful for converting a container to a view. For example, you can use ref_view to convert a vector to a view, which makes it inexpensive to pass the elements of the vector around.
Example: ref_view
// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v = {1,2,3};
auto refView = std::views::all(v);
std::cout << &refView[1] << " : " << &v[1]; // outputs two identical memory addresses, e.g. 00000239AFAFDF90 : 00000239AFAFDF90
refView[0] = 10; // modifies v[0]
std::cout << "\n" << v[0]; // 10
}
00000239AFAFDF90 : 00000239AFAFDF90
10
base
Gets a copy of the underlying range.
constexpr R& base() const;
Parameters
None.
Return value
The underlying range.
begin
Get an iterator to the first element in the ref_view.
constexpr iterator_t<R> begin() const;
Parameters
None.
Return value
An iterator pointing at the first element in this ref_view.
data
Get a pointer to the first element in this ref_view. The elements in the range must be contiguous.
constexpr auto data() const requires contiguous_range<R>;
Parameters
None.
Return value
A pointer to the first element.
empty
Test whether this ref_view is empty.
constexpr bool empty() const
Parameters
None.
Return value
Returns true if the ref_view contains no elements. Otherwise, false.
end
Get the sentinel at the end of this ref_view.
constexpr sentinel_t<R> end() const
Return value
The sentinel that follows the last element in this ref_view:
size
Get the number of elements.
constexpr auto size() const requires sized_range<R>
Parameters
None.
Return value
The number of elements in the ref_view.