容器
以下2点能否启用,完全由用户定义的数据结构实现完成度决定。
1. 要想要*深拷贝*,请确保数据结构已实现**拷贝构造、拷贝赋值**。
2. 要想使用*move*语句,请确保数据结构已实现**移动构造、移动赋值**。
1 span
- 功能:
span
能指向c数组,arry,vector类型数据,是一种对原数据的视图表示,类似于string_view
,与string_view
不同的是,span
能更改指向的数据的值,而string_view
只有只读特性。
- 注意事项:
span
大小在初始化时确定,动态改变指向容器(vector)大小不会作用在span
上,但数据的改变会影响span
,因为span
通过指针指向容器
- 当指定
span
大小时,一定要与指向的容器大小相同,否则会编译报错
- 示例
#include <span>
#include <vector>
#include <array>
template<typename T,size_t sz=std::dynamic_extent>
void print(const std::span<T, sz>& s)
{
for (auto it=s.begin();it!=s.end();++it)
{
std::cout << *it << " ";
}
std::cout<<std::endl;
}
int main()
{
//span初始化
std::vector<int> v_i = { 1,2,3 };
int carr_i[]= { 1,2,3 };
std::array<int,3> arr_i= { 1,2,3 };
std::span<int> sp_v = v_i;
std::span<int, 3> sp_carr = carr_i;
std::span<int, 3> sp_arr = arr_i;
//切分子视图
print(sp_v.subspan(1, 1));
print(sp_v.first(2));
print(sp_v.last(2));
}