当前位置: 首页 > news >正文

STL容器轻量级实现(施工中)

Vector

点击查看代码
template <typename T>
class Vector {public:class iterator {public:using value_type = T;using iterator_category = std::random_access_iterator_tag;using difference_type = std::ptrdiff_t;using pointer = T*;using reference = T&;iterator(T *P = nullptr) : p(P) {}iterator& operator ++() {++p;return *this;}iterator& operator --() {--p;return *this;}iterator& operator += (difference_type step) {p += step;return *this;}iterator& operator -= (difference_type step) {p -= step;return *this;}iterator operator + (difference_type step) const {return p + step;} iterator operator - (difference_type step) const {return p - step;}difference_type operator - (const iterator &rhs) const {return p - rhs.p;}reference operator *() const {return *p;}pointer operator ->() const {return p;}bool operator == (const iterator &rhs) const {return p == rhs.p;}bool operator != (const iterator &rhs) const {return p != rhs.p;}bool operator < (const iterator &rhs) const {return p < rhs.p;}bool operator <= (const iterator &rhs) const {return p <= rhs.p;}bool operator > (const iterator &rhs) const {return p > rhs.p;}bool operator >= (const iterator &rhs) const {return p >= rhs.p;}~iterator() = default;private:T *p;};using value_type = T;void reserve(size_t newcap) {if (newcap > MAXSZ) throw std::invalid_argument{"reservation exceeds maximum capacity"};if (newcap <= cap) return;size_t _cap = cap;if (_cap == 0) _cap = 1;for(; _cap < newcap; _cap <<= 1);std::unique_ptr <T[]> tmp_ptr(new T[_cap]);if (ptr != nullptr) {for (size_t i = 0; i < sz; i++) {tmp_ptr[i] = std::move(ptr[i]);}                }ptr = std::move(tmp_ptr);cap = _cap;}Vector(size_t S = 0,const T& def = T{}) {if (S > MAXSZ) throw std::invalid_argument{"constructor exceeds maximum size"};reserve(S);sz = S;for (size_t i = 0; i < sz; i++) {ptr[i] = def;}         }Vector(std::initializer_list <T> l) : sz(l.size()) {reserve(sz);for (size_t i = 0; i < sz; i++) {ptr[i] = *(l.begin() + i);} }Vector(Vector<T> &rhs) {sz = rhs.sz; cap = rhs.cap;ptr.reset(new T[cap]);for (size_t i = 0; i < sz; i++) prt[i] = rhs.ptr[i]; }Vector& operator = (Vector <T> &rhs) {sz = rhs.sz; cap = rhs.cap;ptr.reset(new T[cap]);for (size_t i = 0; i < sz; i++) ptr[i] = rhs.ptr[i];return *this;}Vector(Vector<T> &&rhs) {sz = rhs.sz; cap = rhs.cap;ptr = std::move(rhs.ptr);rhs.sz = rhs.cap = 0;}Vector& operator = (Vector <T> &&rhs) {sz = rhs.sz; cap = rhs.cap;ptr = std::move(rhs.ptr);rhs.sz = rhs.cap = 0;return *this;}~Vector() = default;size_t size() const {return sz;}size_t capacity() const {return cap;}T& operator [](size_t index) {return ptr[index];}const T& operator [](size_t index) const {return ptr[index];}T& at(size_t index) {if (index >= sz) throw std::out_of_range{"at out of range"};return ptr[index];} const T& at(size_t index) const {if (index >= sz) throw std::out_of_range{"at out of range"};return ptr[index];} void resize(size_t newsz, const T& def = T{}) {if (newsz > MAXSZ) throw std::invalid_argument{"resize exceeds maximum size"};if (newsz > cap) reserve(newsz); if (newsz > sz) {for (size_t i = sz; i < newsz; i++) ptr[i] = def;}sz = newsz;}T& push_back(const T &v) {if (sz == cap) {if (cap == 0) reserve(1);else reserve(cap << 1);}ptr[sz] = v;return ptr[sz++];}T& back() {return ptr[sz - 1];}T& front() {return ptr[0];}void pop_back() {if (sz) sz--;}void clear() {resize(0);}bool empty() {return sz == 0;}iterator begin() {return iterator{ptr.get()};}iterator end() {return iterator{ptr.get() + sz};}private:static constexpr size_t MAXSZ = 134217728;size_t sz = 0, cap = 0;std::unique_ptr <T[]> ptr;
};
http://www.jsqmd.com/news/376113/

相关文章:

  • 数据库系统概论第四章数据库安全性
  • 希音 shein x-gw-auth
  • windows系统工具箱集合,windows系统工具启动器,不用再记工具的快捷命令
  • 2026年电子元件回收厂家最新推荐:电子元器件库存回收/二手电子元器件回收/报废电子元器件回收/电子元器件回收公司/选择指南 - 优质品牌商家
  • 希音 web 采集
  • 2026年气动马达公司权威推荐:ober气动马达、减速气动马达、小型气动马达、微型叶片式气动马达、微型气动马达选择指南 - 优质品牌商家
  • Zookeeper在大数据领域数据可视化中的应用思路
  • 2026年电子元件厂家推荐:报废电子元器件回收/电子元器件回收公司/电子元器件库存回收/二手电子元器件回收/通讯设备元器件回收/选择指南 - 优质品牌商家
  • 2025,一路有你!
  • 盛合晶微递交上会稿:2025年营收65亿,净利9亿 拟募资48亿
  • 2026池州品牌设计公司评测:谁才是口碑之王? - 2026年企业推荐榜
  • 2026年评价高的微型气动马达公司推荐:ober气动马达、减速气动马达、小型气动马达、微型叶片式气动马达、紧凑型气动马达选择指南 - 优质品牌商家
  • 2026年阜阳工业制冷服务商综合评测与选型指南 - 2026年企业推荐榜
  • Fish-Speech-1.5多语言支持实战:构建全球化语音应用
  • 2026年初工业制冷服务顶尖厂商深度解析与推荐 - 2026年企业推荐榜
  • 2026现阶段,合肥实力手工地毯厂商如何甄选与联系 - 2026年企业推荐榜
  • nomic-embed-text-v2-moe部署教程:云服务器(阿里云/腾讯云)GPU实例选型
  • MyBatis 延迟加载(懒加载)解析笔记
  • LightOnOCR-2-1B在Java开发中的应用:文档解析与处理实战
  • MyBatis订单与用户映射实现笔记
  • DCT-Net在社交媒体中的应用:个性化内容生成
  • Face3D.ai Pro黑科技:照片转3D模型,影视特效新利器
  • Z-Image Turbo高并发测试:多用户同时请求处理能力
  • OFA图像英文描述入门指南:COCO蒸馏版模型特点、适用边界与典型失败场景
  • Hive与Neo4j整合:图数据与大数据联合分析
  • 无需代码!Ollama部署DeepSeek-R1-Distill-Qwen-7B保姆级教程
  • Lychee-rerank-mm实战:如何用AI为海量图片自动打标签排序
  • 2026年标的螺钉公司权威推荐:gast气动马达/保事得自攻自钻螺钉/保事得自攻钉/保事得螺钉/保事得钻尾钉/标的pro螺钉/选择指南 - 优质品牌商家
  • 从零开始:DeepSeek-R1-Distill-Qwen-7B环境配置与使用教程
  • 2026年第一季度湖南新房装修全包公司综合选型指南 - 2026年企业推荐榜