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

wordpress传媒传媒企业模板前端优化

wordpress传媒传媒企业模板,前端优化,求助用cms做网站设计_以我的家乡家乡为主题,广州番禺营销型网站建设1. stack的介绍及重要接口 stack---栈#xff0c;是一种“先进后出#xff0c;后进先出”的数据结构。 此处的stack是STL库中定义的一个类模板#xff0c;用于实例化出存储各种类型数据的栈。 bool empty() const;判断栈是否为空(空true/非空false)size_t size() const;返…1. stack的介绍及重要接口 stack---栈是一种“先进后出后进先出”的数据结构。 此处的stack是STL库中定义的一个类模板用于实例化出存储各种类型数据的栈。 bool empty() const;判断栈是否为空(空true/非空false)size_t size() const;返回栈中的数据个数T top(); const T top() const;返回栈顶元素(目前最早进最后出的元素)的引用void push(const T val);入栈(到栈顶)void pop();出栈(删除栈顶元素)void swap(stack x);交换两个栈的内容 2. queue的介绍及重要接口 queue---队列是一种“先进先出后进后出”的数据结构。 此处的queue是STL库中定义的一个类模板用于实例化出存储各种类型数据的队列。 bool empty() const;判断队列是否为空(空true/非空false)size_t size() const;返回队列中的数据个数T front(); const T front() const;返回队头元素(目前最早进最先出的元素)T back(); const T back() const;返回队尾元素(目前最后进最后出的元素)void push(const T val);入队列(到队尾)void pop();出队列(删除队头元素)void swap(queue x);交换两个队列的内容 3. stack和queue的模拟实现 3.1 适配器模式 在STL标准库中stack和queue并没有被划分为容器而是被定义为容器适配器。 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)该种模式是将一个类的接口转换成客户希望的另外一个接口。 如果有数据结构的知识基础就能知道stack和queue的底层就是顺序表是数据访问受到限制的顺序表。 于是我们可以对顺序表及其接口进行包装进而实现stack和queue。 3.2 stack的模拟实现 namespace lbz {templateclass T, class container dequeTclass stack{public:stack(const container ctnr container()):_con(ctnr){}bool empty() const{return _con.empty();}size_t size() const{return _con.size();}T top(){return _con.back();}const T top() const{return _con.back();}void push(const T val){_con.push_back(val);}void pop(){_con.pop_back();}void swap(stack st){_con.swap(st._con);}private:container _con;}; } 3.3 queue的模拟实现 namespace lbz {templateclass T, class container dequeTclass queue{public:queue(const container ctnr container()):_con(ctnr){}bool empty() const{return _con.empty();}size_t size() const{return _con.size();}T front(){return _con.front();}const T front() const{return _con.front();}T back(){return _con.back();}const T back() const{return _con.back();}void push(const T val){_con.push_back(val);}void pop(){_con.pop_front();}void swap(queue st){_con.swap(st._con);}private:container _con;}; } 4. deque的简单介绍 一般来说stack底层适合用vectorqueue底层适合用list但是在标准库中二者都用deque作为底层容器的缺省参数。 vector和list由于自身的优缺点过于明显且对立所以二者在实现时因为效率的原因各自有一些对方没有的接口这也使得他们分别与stack和list绑定。 而deque可以说是vector和list的缝合怪因为二者的接口它都支持所以可以同时作为stack和queue的底层容器这也就意味着它是将二者优缺点折中的数据结构。 4.1 deque的结构 deque(双端队列)是一种双开口的连续空间的数据结构。 双开口的含义是可以在头尾两端进行插入和删除操作且时间复杂度为O(1)与vector比较头插效率高不需要搬移元素与list比较空间利用率比较高。 然而deque并不是真正连续的空间而是由一段段连续的小空间拼接而成的实际deque类似于一个动态的二维数组其底层结构如下图所示 其中map是一个指针数组存储各个存储数据的数组的地址。 初始的数组存放在map中部位置当需要向前扩容时就在将新申请的数组放到已有数组在map中的前一个位置当需要向后扩容时就将新申请的数组放到map中已有数组的后一个位置。 双端队列底层是一段假象的连续空间实际是分段连续的为了维护其“整体连续”以及随机访问的假象落在了deque的迭代器身上因此deque的迭代器设计就比较复杂如下图所示 deque迭代器具体是如何运作的比较复杂在此不作过多论述简单了解即可。  4.2 deque的优缺点 与vector比较deque的优势是头部插入和删除时不需要搬移元素效率特别高而且在扩容时也不需要搬移大量的元素因此其效率是必vector高的。 与list比较deque的优势是其底层是连续空间空间利用率比较高不需要存储额外字段。 deque有一个致命缺陷不适合遍历因为在遍历时deque的迭代器要频繁的去检测其是否移动到某段小空间的边界导致效率低下而序列式场景中可能需要经常遍历因此在实际中需要线性结构时大多数情况下优先考虑vector和listdeque的应用并不多而目前能看到的一个应用就是STL用其作为stack和queue的底层数据结构。 4.3 为什么选择deque作为stack和queue的底层默认容器 stack是一种后进先出的特殊线性数据结构因此只要具有push_back()和pop_back()操作的线性结构都可以作为stack的底层容器比如vector和list都可以queue是先进先出的特殊线性数据结构只要具有push_back和pop_front操作的线性结构都可以作为queue的底层容器比如list。 但是STL中对stack和queue默认选择deque作为其底层容器主要是因为 1. stack和queue不需要遍历(因此stack和queue没有迭代器)只需要在固定的一端或者两端进行操作。 2. 在stack中元素增长时deque比vector的效率高(扩容时不需要搬移大量数据)queue中的元素增长时deque不仅效率高而且内存使用率高。 结合了deque的优点而完美的避开了其缺陷。 5. 优先级队列priority_queue 顾名思义优先级队列就是让队中的数据按照优先级大小顺序等排队出队。 priority_queue的底层实际上就是堆既可以依据大小来建大堆小堆也可以根据自定义的逻辑来制定优先级。 函数指针在C中并不推荐这里我们要用到仿函数来传递我们的建堆逻辑。 5.1 仿函数 STL库中priority_queue的原型如下 template class T, class Container vectorT, class Compare lesstypename Container::value_type class priority_queue; 我们可以看到模板的类型参数列表中有一个Compare类型其缺省值为lesstypename Container::value_type。 这里的less是一个特殊的类(对应的有greater类)它没有任何成员变量但是对()进行了重载 template class T struct less : binary_function T,T,bool {bool operator() (const T x, const T y) const {return xy;} }; 于是less类就可以这样来使用 int main() {int a 10, b 10;lessint isLess;if(isLess(a, b))cout a b endl;return 0; } 这里由lessint类实例化出的对象isLess有了类似函数的用法效果也与函数相同这就是所谓的仿函数。 通过这样的仿函数我们就可以将自定义的逻辑传入到类模板中去。 注意传入less建的是大堆传入greater建的是小堆。 5.2 priority_queue的常用接口 由于priority_queue实质上就是堆所以下表中均以堆代指。 bool empty() const;判断堆是否为空(空true/非空false)size_t size() const;返回堆中的数据个数const T top() const;返回堆队头元素(堆顶元素)void push(const T val);入堆void pop();出堆void swap(priority_queue x);交换两个堆的内容 5.3 priority_queue的模拟实现 namespace lbz {template class T, class Container vectorT, class Compare lessTclass priority_queue{public:void push(const T x){_con.push_back(x);AdjustUp(_con.size() - 1);}void pop(){swap(_con[0], _con[_con.size() - 1]);_con.pop_back();AdjustDown(0);}const T top(){return _con[0];}size_t size() const{return _con.size();}bool empty() const{return _con.empty();}private:void AdjustUp(size_t child){size_t parent (child - 1) / 2;while (child 0 _com(_con[parent], _con[child])){swap(_con[parent], _con[child]);child parent;parent (child - 1) / 2;}}void AdjustDown(size_t parent){size_t child parent * 2 1;while (child _con.size()){if (child 1 _con.size() _com(_con[child], _con[child 1]))child;if (_com(_con[parent], _con[child])){swap(_con[parent], _con[child]);parent child;child parent * 2 1;}else{break;}}}Container _con;Compare _com;}; }
http://www.dnsts.com.cn/news/3157.html

相关文章:

  • mx动漫wordpress主题如何做谷歌优化
  • 香港网站空间好吗百度网页版入口
  • 武汉做网站的公司网络整合营销4i原则
  • 网站在线客服代码下载找一个免费域名的网站
  • 用上网做任务的网站跨国网站浏览器
  • 南宁网站seo公司哪家好青岛官网seo公司
  • 大连市中心是哪个区昆明seo网站建设
  • 网站日志管理小熊代刷推广网站
  • 越秀网站建设公司单页网站设计
  • 购物网站建设 费用seo外链怎么做
  • 销售管理系统哪家好网站为什么要seo
  • 网站开发android客户端seoheuni
  • 壶关网站建设网站服务器查询工具
  • 制作网页的软件s开头搜索引擎排名优化价格
  • 廊坊app网站制作百度营业执照怎么办理
  • 手机网站设计机构企业推广网络营销
  • 广州番禺区天气预报东莞整站优化
  • 泰州网页网站制作网站权重查询
  • dede网站地图样式修改自媒体运营主要做什么
  • 网站建设 页面品牌营销网站建设
  • 怎么找人做网站啊品牌策划与推广
  • 做债的网站网站打开
  • edunews wordpressseo基础优化包括哪些内容
  • 深圳做网站优化sem是什么意思啊
  • 数字货币交易网站开发广告策划书
  • 网站首页被k 做跳转千锋教育学费
  • 邮箱免费申请注册账号外贸seo网站
  • 关于政府网站建设的研究报告培训学校管理制度大全
  • 设计好看的美食网站有哪些新冠咳嗽怎么办
  • 台州网站建设方案优化企业培训体系