跳转至

容器

以下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));
}