C++20中的span容器及用法小结 template<typename T, std::size_t Extent = std::dynamic_extent> 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 <std::size_t N> constexpr span(T(&arr)[N]) noexcept : data_(arr), size_(N) {} template <typename Container> 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_; // 素数量 };
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/50605.html