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

移动网站建设机构深圳建设集团怎么样

移动网站建设机构,深圳建设集团怎么样,有什么做服装的网站,网站制作网站开发公司目录 1.list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator 的使用 1.2.3 list capacity 容量 1.2.4 list element access 访问list元素 1.2.5 list modifiers 修改 1.2.6 迭代器失效 1.list的介绍及使用 1.1 list的介绍 C官网 … 目录 1.list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator 的使用 1.2.3 list capacity 容量 1.2.4 list element access 访问list元素 1.2.5 list modifiers 修改 1.2.6 迭代器失效 1.list的介绍及使用 1.1 list的介绍 C官网 list 介绍文档 list是可以在常数范围内在任意位置进行插入和删除的序列式容器并且该容器可以前后双向迭代是一个双向带头循环链表。list的底层是双向链表结构双向链表中每个元素存储在互不相关的独立节点中在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似最主要的不同在于forward_list是单链表只能朝前迭代已让其更简单高效。与其他的序列式容器相比(arrayvectordeque)list通常在任意位置进行插入、移除元素的执行效率更好。与其他序列式容器相比list和forward_list最大的缺陷是不支持任意位置的随机访问比如要访问list的第6个元素必须从已知的位置(比如头部或者尾部)迭代到该位置在这段位置上迭代需要线性的时间开销list还需要一些额外的空间以保存每个节点的相关联信息对于存储类型较小元素的大list来说这可能是一个重要的因素 1.2 list的使用 list中的接口比较多此处类似只需要掌握如何正确的使用然后再去深入研究背后的原理已达到可扩展的能力。以下为list中一些常见的重要接口 1.2.1 list的构造 构造函数(constructor)接口说明list (size_type n, const value_type val value_type())构造的list中包含n个值为val的元素list()构造空的listlist (const list x)拷贝构造函数list (InputIterator first, InputIterator last)用[first, last)区间中的元素构造list void TestList1() {listint l1; // 构造空的l1listint l2(4, 100); // l2中放4个值为100的元素listint l3(l2.begin(), l2.end()); // 用l2的[begin(), end()左闭右开的区间构造l3listint l4(l3); // 用l3拷贝构造l4// 以数组为迭代器区间构造l5int array[] { 16,2,77,29 };listint l5(array, array sizeof(array) / sizeof(int));// 列表格式初始化C11listint l6{ 1,2,3,4,5 };// 用迭代器方式打印l5中的元素listint::iterator it l5.begin();while (it ! l5.end()){cout *it ;it;} cout endl;// C11范围for的方式遍历for (auto e : l5)cout e ;cout endl; } 1.2.2 list iterator 的使用 此处大家可暂时将迭代器理解成一个指针该指针指向list中的某个节点。后面会模拟实现 函数声明接口说明begin() end()返回第一个元素的迭代器返回最后一个元素下一个位置的迭代器rbegin() rend()返回第一个元素的reverse_iterator,即end位置返回最后一个元素下一个位置的 reverse_iterator,即begin位置 【注意】 begin与end为正向迭代器对迭代器执行操作迭代器向后移动 rbegin(end)与rend(begin)为反向迭代器对迭代器执行操作迭代器向前移动 // 注意遍历链表只能用迭代器和范围for void PrintList(const listint l) {// 注意这里调用的是list的 begin() const返回list的const_iterator对象for (listint::const_iterator it l.begin(); it ! l.end(); it){cout *it ;// *it 10; 编译不通过}cout endl; }void TestList2() {int array[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };listint l(array, array sizeof(array) / sizeof(array[0]));// 使用正向迭代器正向list中的元素// listint::iterator it l.begin(); // C98中语法auto it l.begin(); // C11之后推荐写法while (it ! l.end()){cout *it ;it;}cout endl;// 使用反向迭代器逆向打印list中的元素// listint::reverse_iterator rit l.rbegin();auto rit l.rbegin();while (rit ! l.rend()){cout *rit ;rit;}cout endl; } 1.2.3 list capacity 容量 函数声明接口说明empty()检测list是否为空是返回true否则返回falsesize()返回list中有效节点的个数 1.2.4 list element access 访问list元素 函数声明接口说明front()返回list的第一个节点中值的引用back()返回list的最后一个节点中值的引用 1.2.5 list modifiers 修改 函数声明接口说明push_front在list首元素前插入值为val的元素pop_front删除list中第一个元素push_back在list尾部插入值为val的元素pop_back删除list中最后一个元素insert在list position 位置中插入值为val的元素erase删除list position位置的元素swap交换两个list中的元素clear清空list中的有效元素 // push_back/pop_back/push_front/pop_front void TestList3() {int array[] { 1, 2, 3 };listint L(array, array sizeof(array) / sizeof(array[0]));// 在list的尾部插入4头部插入0L.push_back(4);L.push_front(0);PrintList(L);// 删除list尾部节点和头部节点L.pop_back();L.pop_front();PrintList(L); }// insert /erase void TestList4() {int array1[] { 1, 2, 3 };listint L(array1, array1 sizeof(array1) / sizeof(array1[0]));// 获取链表中第二个节点auto pos L.begin();cout *pos endl;// 在pos前插入值为4的元素L.insert(pos, 4);PrintList(L);// 在pos前插入5个值为5的元素L.insert(pos, 5, 5);PrintList(L);// 在pos前插入[v.begin(), v.end)区间中的元素vectorint v{ 7, 8, 9 };L.insert(pos, v.begin(), v.end());PrintList(L);// 删除pos位置上的元素L.erase(pos);PrintList(L);// 删除list中[begin, end)区间中的元素即删除list中的所有元素L.erase(L.begin(), L.end());PrintList(L); }void TestList5() {// 用数组来构造listint array1[] { 1, 2, 3 };listint l1(array1, array1 sizeof(array1) / sizeof(array1[0]));PrintList(l1);// 交换l1和l2中的元素listint l2;l1.swap(l2);PrintList(l1);PrintList(l2);// 将l2中的元素清空l2.clear();cout l2.size() endl; }另外list还自己提供了 sort() 函数用来排序但是STL种算法库中已经提供了sort函数这里为什么还要提供呢 因为迭代器还有三种分类单向(例如单链表),双向(例如list)和随机迭代器(例如vector)单向只支持双向支持/--随机还支持/-。 void test1() {listint l;l.push_back(1);l.push_back(2);l.push_back(3);l.push_back(4);l.push_back(5);//list不支持[]listint::iterator it l.begin();while (it ! l.end()){cout *it ;it;}cout endl;//iterator性质分类//单向//双向/--//随机/--//-// list没有办法使用算法库中的sort,所以额外支持sort 因为没有办法随机存取所以使用归并排序//sort(l.begin(), l.end());//支持的是自由访问迭代器可以/--//-这里迭代器是双向的只能 --l.sort(); //默认升序 for (auto e : l){cout e ;}cout endl; } 1.2.6 迭代器失效 前面说过此处大家可将迭代器暂时理解成类似于指针迭代器失效即迭代器所指向的节点的无效即该节点被删除了。因为list的底层结构为带头结点的双向循环链表因此在list中进行插入时是不会导致list的迭代器失效的只有在删除时才会失效并且失效的只是指向被删除节点的迭代器其他迭代器不会受到影响。 void TestListIterator1() {int array[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };listint l(array, arraysizeof(array)/sizeof(array[0]));auto it l.begin();while (it ! l.end()){// erase()函数执行后it所指向的节点已被删除因此it无效//在下一次使用it时必须先给其赋值l.erase(it);it;} }// 改正 void TestListIterator() {int array[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };listint l(array, arraysizeof(array)/sizeof(array[0]));auto it l.begin();while (it ! l.end()){it l.erase(it); // 或者 l.erase(it); } } 本篇结束list更多详细介绍参考list的文档介绍
http://www.sadfv.cn/news/256546/

相关文章:

  • 网站开发 模块邢台多地划为高风险区
  • 全国十大计算机培训机构怎样做网络推广优化
  • 视频网站做板块栏目襄阳蒂凯网络网站建设小程序
  • 南昌网站建设兼职我要买房网
  • 做网站域名怎么选有利于seo简述商业网站建设的流程
  • 找单位做网站需要注意什么wordpress 数据库宕机
  • 金堂县城乡建设局网站前端开发培训机构有哪些
  • 重庆动画网站建设南京网站推广哪家便宜
  • 免费动画制作网站外贸采购网官网
  • 如何做网站收徒弟网站传奇广告查询网站
  • 地产行业网站建设图片c 网站开发 环境配置
  • wordpress安装服务器配置晋中网站seo
  • 小程序模板做视频网站企业seo网站推广
  • 专门做酒的网站论坛类网站开发报价
  • 扶余市建设局网站wordpress ping列表
  • 百度网站介绍显示图片北京排名seo优化渠道
  • 专业建站网站服务国内规划设计公司排名
  • 网站 配色方案做网站中心
  • 深圳制作手机网站seo专员很难吗
  • 网站百度推广怎么做的软文网站备案如何查询
  • 凤岗网站建设公司深圳福田专业网站建设
  • 湛江市政工程建设公司网站购物平台排行榜2021
  • 哈尔滨网站建设培训慈溪哪里有做网站
  • 自助建站的优势高端品牌网站建设有哪些注意事项
  • 专门做有机食品的网站网页设计的培训机构
  • 邳州网站制作移动端高端网站开发
  • 新版织梦腾讯3366小游戏门户网站模板源码石家庄做网站公司汉狮价格
  • 热烈祝贺公司网站上线建筑人才市场招聘网
  • 有没有做吉祥物的网站公众号开发是不是网站开发
  • 国内建设地铁的公司网站注册个免费网站