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

洛阳网站开发公司建设内容是什么

洛阳网站开发,公司建设内容是什么,东营企业网站建设,qq邮箱登录deque容器的存储结构 和 vector 容器采用连续的线性空间不同#xff0c;deque 容器存储数据的空间是由一段一段等长的连续空间构成#xff0c;各段空间之间并不一定是连续的#xff0c;可以位于在内存的不同区域。 deque采用一块所谓的map数组#xff08;注意#xff0c…deque容器的存储结构 和 vector 容器采用连续的线性空间不同deque 容器存储数据的空间是由一段一段等长的连续空间构成各段空间之间并不一定是连续的可以位于在内存的不同区域。 deque采用一块所谓的map数组注意不是STL的map容器作为主控。这里所谓map是一小块连续空间类似于vector其中每个元素此处称为一个节点node都是指针指向另一段较大的连续线性空间称为缓冲区。缓冲区才是deque的储存空间主体。SGI STL 允许我们指定缓冲区大小默认值0表示将使用512 bytes 缓冲区。 通过建立 map 数组deque 容器申请的这些分段的连续空间就能实现“整体连续”的效果。换句话说当 deque 容器需要在头部或尾部增加存储空间时它会申请一段新的连续空间同时在 map 数组的开头或结尾添加指向该空间的指针由此该空间就串接到了 deque 容器的头部或尾部。 如果 map 数组满了怎么办很简单再申请一块更大的连续空间供 map 数组使用将原有数据很多指针拷贝到新的 map 数组中然后释放旧的空间。 deque 容器的分段存储结构提高了在序列两端添加或删除元素的效率但也使该容器迭代器的底层实现变得更复杂。 deque容器迭代器的底层实现 由于 deque 容器底层将序列中的元素分别存储到了不同段的连续空间中因此要想实现迭代器的功能必须先解决如下 2 个问题 迭代器在遍历 deque 容器时必须能够确认各个连续空间在 map 数组中的位置迭代器在遍历某个具体的连续空间时必须能够判断自己是否已经处于空间的边缘位置。如果是则一旦前进或者后退就需要跳跃到上一个或者下一个连续空间中。 为了实现遍历 deque 容器的功能deque 迭代器定义了如下的结构 templateclass T,... struct __deque_iterator{...T* cur;T* first;T* last;map_pointer node;//map_pointer 等价于 T** }可以看到迭代器内部包含 4 个指针它们各自的作用为 cur指向当前正在遍历的元素first指向当前连续空间的首地址last指向当前连续空间的末尾地址node它是一个二级指针用于指向 map 数组中存储的指向当前连续空间的指针。 借助这 4 个指针deque 迭代器对随机访问迭代器支持的各种运算符进行了重载能够对 deque 分段连续空间中存储的元素进行遍历。例如 //当迭代器处于当前连续空间边缘的位置时如果继续遍历就需要跳跃到其它的连续空间中该函数可用来实现此功能 void set_node(map_pointer new_node){node new_node;//记录新的连续空间在 map 数组中的位置first *new_node; //更新 first 指针//更新 last 指针difference_type(buffer_size())表示每段连续空间的长度last first difference_type(buffer_size()); } //重载 * 运算符 reference operator*() const{return *cur;} pointer operator-() const{return (operator *());} //重载前置 运算符 self operator(){cur;//处理 cur 处于连续空间边缘的特殊情况if(cur last){//调用该函数将迭代器跳跃到下一个连续空间中set_node(node1);//对 cur 重新赋值cur first;}return *this; } //重置前置 -- 运算符 self operator--(){//如果 cur 位于连续空间边缘则先将迭代器跳跃到前一个连续空间中if(cur first){set_node(node-1);cur last;}--cur;return *this; }deque容器的底层实现 了解了 deque 容器底层存储序列的结构以及 deque 容器迭代器的内部结构之后接下来看看 deque 容器究竟是如何实现的。 deque 容器除了维护先前讲过的 map 数组还需要维护 start、finish 这 2 个 deque 迭代器。以下为 deque 容器的定义 //_Alloc为内存分配器 templateclass _Ty,class _Alloc allocator_Ty class deque{... protected:iterator start;iterator finish;map_pointer map; ... }其中start 迭代器记录着 map 数组中首个连续空间的信息finish 迭代器记录着 map 数组中最后一个连续空间的信息。另外需要注意的是和普通 deque 迭代器不同start 迭代器中的 cur 指针指向的是连续空间中首个元素而 finish 迭代器中的 cur 指针指向的是连续空间最后一个元素的下一个位置。 因此deque 容器的底层实现如下图所示 借助 start 和 finish以及 deque 迭代器中重载的诸多运算符就可以实现 deque 容器提供的大部分成员函数比如 //begin() 成员函数 iterator begin() {return start;} //end() 成员函数 iterator end() { return finish;} //front() 成员函数 reference front(){return *start;} //back() 成员函数 reference back(){iterator tmp finish;--tmp;return *tmp; } //size() 成员函数 size_type size() const{return finish - start;}//deque迭代器重载了 - 运算符 //enpty() 成员函数 bool empty() const{return finish start;}stack和queue的原理 由stack和queue源码可知其实stack和queue是将deque容器进行再封装其底层是一个deque容器。 对stack和queue操作其实间接操作的是deque容器。
http://www.zqtcl.cn/news/242153/

相关文章:

  • 网站单页支付宝支付怎么做的排名优化公司口碑哪家好
  • 淄博网站制作服务推广做网站服务器配置
  • ppt做的好的有哪些网站有哪些广州品牌型网站建设
  • 怎么学做一件完整衣服网站网站 相对路径
  • 十大wordpress主题江门seo排名优化
  • 石家庄网站搭建定制在百度上如何上传自己的网站
  • 南宁建设厅官方网站福州中小企业网站制作
  • 模板网站建设平台昆山专业网站建设公司哪家好
  • 百度指数的数值代表什么网站建设优化的作用
  • 河南便宜网站建设价格wordpress页面图片插件
  • 网站生成wordwordpress汽车主题公园
  • 网络营销成功的案例及其原因湖南网站seo地址
  • 潍坊企业网站模板绩效考核表 网站建设
  • 建设企业网站公做深度游网站 知乎
  • 可以做h5的网站韶关网站建设制作
  • 企业网站建设的基本要素有哪些通知模板范文
  • 网站建设计划书范本住房和城乡建设部网站事故快报
  • 西安网站建设公司排家居用品东莞网站建设
  • 网站建设评比文章上海手机网站建设价格
  • 微信手机网站三合一建筑工程网络计划方法
  • 网站上文章分享的代码怎么做的建在线教育网站需要多少钱
  • 如何自己弄网站怎么用手机做网站服务器
  • 如果我的网站被百度收录了_以后如何做更新争取更多收录有做不锈钢工程的网站
  • 适合做公司网站的cms东莞阳光网站投诉平台
  • 建设一个网站的意义印刷东莞网站建设技术支持
  • 80端口被封怎么做网站个人网站做支付接口
  • 如何区分网站开发语言建设网站地图素材
  • 建网站的流程怎么投稿各大媒体网站
  • 品牌推广的步骤和技巧专业seo培训学校
  • 新网站上线怎么做seo网站建设语言什么语言