C++20中的span容器及用法小结
template
class span {
public:
// 定义迭代器类型
using iterator = T*;
using const_iterator = const T*;
// 构造函数
constexpr span() noexcept : data_(nullptr), size_(0) {}
constexpr span(T* ptr, std::size_t count) : data_(ptr), size_(count) {}
template
constexpr span(T(&arr)[N]) noexcept : data_(arr), size_(N) {}
template
constexpr span(Container& c) noexcept : data_(c.data()), size_(c.size()) {}
// 拷贝构造函数和拷贝赋值运算符
constexpr span(const span& other) noexcept = default;
span& operator=(const span& other) noexcept = default;
// 访问元素和迭代器操作
constexpr T* data() const noexcept { return data_; }
constexpr std::size_t size() const noexcept { return size_; }
constexpr bool empty() const noexcept { return size_ == 0; }
constexpr T& operator[](std::size_t idx) const { return data_[idx]; }
constexpr T& front() const { return data_[0]; }
constexpr T& back() const { return data_[size_-1]; }
constexpr iterator begin() const noexcept { return data_; }
constexpr iterator end() const noexcept { return data_ + size_; }
constexpr const_iterator cbegin() const noexcept { return data_; }
constexpr const_iterator cend() const noexcept { return data_ + size_; }
private:
T* data_; // 元素指针
std::size_t size_; // 元素数量
};
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播