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

重庆网站建设价格百度关键词排名点

重庆网站建设价格,百度关键词排名点,平阳网站制作,凡客诚品创建时间目录 一、list的使用 二.list的模拟实现 三.总结 一、list的使用 list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个元素和后一个元素。 常见的list的函数的使用 std::list<int> It {1,…

目录

一、list的使用

二.list的模拟实现

三.总结


一、list的使用

list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一个元素和后一个元素。

常见的list的函数的使用

std::list<int> It = {1, 2, 3, 4, 5};通过迭代器访问元素:
std::list<int>::iterator it = It.begin();
while (it != It.end()) {std::cout << *it << std::endl;++it;
}在链表尾部插入元素:
It.push_back(6);在链表头部插入元素
It.push_front(0);删除元素
It.remove(3); // 删除值为3的元素
It.erase(it); // 删除迭代器指向的元素排序链表:
It.sort();反转链表:
It.reverse();

 但需要注意的是:迭代器失效: 在list进行插入和删除操作时,不仅操作的元素所在的迭代器会失效,所有指向链表的迭代器、指针和引用都会失效。因此,在进行操作后,需要重新获取有效的迭代器。(vector的使用也要注意这个问题)

二.list的模拟实现

list的迭代器和 string与 vector不太一样,,没有vector那么天生条件优越。需要单独实现一个类,来封装迭代器。

指针可以解引用,迭代器的vector类中必须重载operator*()

指针可以通过->访问其所指空间成员,迭代器类中必须重载oprator->()

指针可以++向后移动,迭代器类中必须重载operator++()与operator++(int)

迭代器需要进行是否相等的比较,因此还需要重载operator==()与operator!=()。

#pragma once
#include<iostream>
#include<assert.h>
using namespace std;namespace wyb {template<class T>struct list_node{T _data;list_node<T>* _prve;list_node<T>* _next;list_node(const T& data = T()):_data(data), _prve(nullptr), _next(nullptr){}};template<class T>struct list_iterator{typedef list_node<T> Node;typedef list_iterator<T> self;Node* _node;list_iterator(Node* node):_node(node){}T& operator*(){return _node->_data;}self& operator++(){_node = _node->_next;return *this;}self& operator--(){_node = _node->_prve;return *this;}bool operator!=(const self& s) const{return _node != s._node;}bool operator==(const self& s) const{return _node == s._node;}};template <class T>class list{typedef list_node<T> Node;public:typedef  list_iterator<T> iterator;iterator begin(){return _head->_next;}iterator end(){return _head;}list(){_head = new Node;_head->_prve = _head;_head->_next = _head;_size = 0;}void insert(iterator pos, const T& x){Node* cur = pos._node;Node* prve = cur->_prve;Node* newnode = new Node(x);newnode->_next = cur;cur->_prve = newnode;prve->_next = newnode;newnode->_prve = prve;_size++;}void push_back(const T& x){insert(end(), x);}void front_back(const T& x){insert(begin(), x);}void pop_back(){erase(--end());}void  pop_front(){erase(begin());}void erase(iterator pos){assert(pos != end());Node* prve = pos->_node->_prve;Node* next = pos->_node->_next;prve->_next = next;next->_prve = prve;free(pos);_size--;}private:Node* _head;size_t _size;};void test_list(){list<int> It;It.push_back(1);It.push_back(2);It.push_back(3);It.push_back(4);It.push_back(5);list<int>::iterator it=It.begin();while (it != It.end()){cout << *it << " ";++it;}cout << endl;}
}

1、任意位置插入删除时:list可以随意插入删除,但是vector任意位置的插入删除效率低,需要挪动元素,尤其是插入时有时候需要异地扩容,就需要开辟新空间,拷贝元素,释放旧空间,效率很低

2、访问元素时:vector支持随机访问,但是list不支持随机访问
3、迭代器的使用上:vector可以使用原生指针,但是list需要对原生指针进行封装
4、空间利用上:vector使用的是一个连续的空间,空间利用率高,而list使用的是零碎的空间,空间利用率低

三.总结

以上关于list的模拟实现有点不全,我后期我会补充一些进来。又不懂的地方可以随时联系。

创作不易希望大佬点赞关注。

http://www.tj-hxxt.cn/news/11577.html

相关文章:

  • 建设网站各方面费用预算谷歌网页版
  • 兼职网站建设 开源互联网广告优势
  • 专业郑州做网站的公司seo在线培训课程
  • 网站程序开发后怎么上线网上推广专员是什么意思
  • 长春网站设计制作关键词优化推广
  • 精品网站设计千锋教育学费
  • 网站开发从事拼多多关键词排名查询工具
  • 国外营销型网站设计常见的网络营销平台有哪些
  • 河南网站建设问一问公司seo诊断服务
  • 虚拟主机建wordpressseo全网优化指南
  • 小网站关键词优化网站排名如何
  • 网站设置怎么删除数据软文营销的技巧
  • 可以做h5网站网页设计框架图
  • 网站开发商品管理竞价广告点击软件
  • 典型营销型网站有哪些企业建站公司热线电话
  • 淘宝网站设计模板下载长沙网站关键词排名公司
  • 做暧暧网站免费搭建一个网站需要多少钱?
  • 人才招聘网站开发 源代码google推广费用
  • 网页游戏2022排行榜前十名深圳市seo点击排名软件价格
  • 什么是门户类型的网站广东: 确保科学精准高效推进疫情
  • 外贸网站的特色汕头百度网站推广
  • 小说网站怎么推广seo优化网络公司
  • 容桂销售型网站建设济南seo整站优化招商电话
  • 用什么手机软件做网站外贸国际网站推广
  • 如何自己做网站卖东西百度问一问客服人工在线咨询
  • wordpress值得买主题许昌正规网站优化公司
  • 做网站待遇西安seo全网营销
  • 怎样做电子商务网站长沙谷歌seo
  • 王刚做的加盟网站名叫什么国家反诈中心app下载
  • 蓬莱做网站案例seo技术论坛