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

广东建的电商网站叫啥应用商店网站源码

广东建的电商网站叫啥,应用商店网站源码,龙泉市做网站企业,微信h5制作平台目录 list的使用构造函数和赋值重载迭代器(最重要)容量相关插入删除元素操作reversesortuniqueremovesplice list的底层实际是双向链表结构 list的使用 构造函数和赋值重载 构造函数说明list()无参构造list (size_type n, const value_type& val value_type())构造的li…

目录

  • list的使用
    • 构造函数和赋值重载
    • 迭代器(最重要)
    • 容量相关
    • 插入删除
    • 元素操作
      • reverse
      • sort
      • unique
      • remove
      • splice

list的底层实际是双向链表结构

list的使用

构造函数和赋值重载

构造函数说明
list()无参构造
list (size_type n, const value_type& val = value_type())构造的list中包含n个值为val的元素
list (const list& x)拷贝构造函数
list (InputIterator first, InputIterator last)用[first, last)区间中的元素构造list

构造函数和前面的容器用法相同

void test1()
{list<int> lt1;//无参构造list<int> lt2(10, 1);//1,1,1,1,1,1,1,1,1,1list<int> lt3(lt2);//拷贝构造list<int> lt4(lt2.begin(), lt2.end());
}

赋值重载

list& operator= (const list& x);
void test1()
{list<int> lt1;//无参构造list<int> lt2(10, 1);//1,1,1,1,1,1,1,1,1,1list<int> lt3(lt2);//拷贝构造list<int> lt4(lt2.begin(), lt2.end());list<int> lt5;lt5 = lt4;//赋值重载
}

迭代器(最重要)

迭代器类型分为三种:单向迭代器、双向迭代器、随机迭代器

单向迭代器:支持++          例如forward_list、哈希的迭代器类型是单向迭代器
双向迭代器:支持++,- -      例如list、map、set的迭代器类型是双向迭代器
随机迭代器:支持++,- -,+,-   例如vector、string、deque的迭代器类型是随机迭代器

随机迭代器可以认为是特殊的双向迭代器,双向迭代器可以认为是特殊的单向迭代器

在这里插入图片描述


list的迭代器与vectorstring不同
迭代器的类型是与容器底层结构决定的

vectorstring的底层是连续的,所以它们的迭代器实际上就是指针,所以它们支持++,–,+,- ,类型是随机迭代器

list的底层是不连续的,前后是通过指针连接在一起的,所以它的迭代器不是指针(实际上是指针经过封装),经过封装后,迭代器会支持++、- -,类型是单向迭代器

对于不支持+,-,这样封装是因为:像it.begin()+5这样的效率太低,C++不支持

list的迭代器不支持像vector中的it.begin()+5,如果这样写会报错

在这里插入图片描述
只支持++,--

void test2()
{list<int> lt{ 1,2,3,4,5,6 };lt.begin()--;lt.begin()++;
}

如果想将list的迭代器像vectorit.begin()+5一样移动多个位置,只能这样:

void test2()
{list<int> lt{ 1,2,3,4,5,6 };list<int>::iterator it = lt.begin();for (size_t i = 0; i < 5; i++){++it;}
}

剩下的,list迭代器也支持之前的函数,用法也相同
在这里插入图片描述


容量相关

empty

bool empty() const;

判断容器是否为空


size

size_type size() const;

返回容器中元素的个数


插入删除

list作为双向循环链表,头插,头删,尾插,尾删的效率都很高,所以list中都支持这些操作

函数说明
void push_front (const value_type& val);在list首元素前插入值为val的元素
void pop_front();删除list中第一个元素
void push_back (const value_type& val);在list尾部插入值为val的元素
void pop_back();删除list中最后一个元素
void test3()
{list<int> lt{ 1,2,3,4,5,6 };lt.push_back(10);lt.push_front(0);lt.pop_back();lt.pop_front();
}

insert

iterator insert (iterator position, const value_type& val);void insert (iterator position, size_type n, const value_type& val);template <class InputIterator>void insert (iterator position, InputIterator first, InputIterator last);

insert的操作和vector中的用相同,但是这个insert不会导致迭代器失效
因为链表的插入必须要扩容,迭代器是指向某一个节点,插入后迭代器还是指向原先的节点,不会导致失效

erase

iterator erase (iterator position);
iterator erase (iterator first, iterator last);

erase 的操作和vector中的用相同,这个erase 会导致迭代器失效
迭代器是指向某一个节点,删除这个节点后,迭代器失效


元素操作


reverse

void reverse();

这个reverselist类中自带的一个函数,作用是逆置链表

<algorithm>中也有一个reverse函数
reverse函数中迭代器类型是双向迭代器,而list的迭代器类型就是双向迭代器,所以list也可以使用<algorithm>中的reverse
在这里插入图片描述

void test4()
{list<int> lt{ 1,2,3,4,5,6 };lt.reverse();reverse(lt.begin(), lt.end());
}



sort

void sort();

作用是排序,底层是归并
<algorithm>中也有sort函数,但是对于list来说,想要排序,只能使用list库中的sort函数,不能使用<algorithm>中也有sort

因为list的迭代器类型是双向迭代器,而<algorithm>中的sort的参数迭代器的类型是随机迭代器,所以list不能使用<algorithm>中的sort函数。

其实这里的sort意义不大,因为相对于<algorithm>中的sort效率低(list中的sort底层使用的是归并,<algorithm>中的sort使用的是快排)
而唯一的意义是:方便,数据量小了可以拍,但是数据量再大,就不要使用list中的sort

如果想要排序,完全可以把list中的数据拷贝到vector中,然后排vector,排序完之后再把数据拷贝会list

void test5()
{list<int> lt{ 5,7,3,9,1,0,4,7,8,9,4, };vector<int> v;//将数据从list拷贝到vectorfor (auto e : lt){v.push_back(e);}//在vector中排序reverse(v.begin(), v.end());//再把数据从vector拷贝到list中for (auto e : v){lt.push_back(e);}
}



unique

void unique();

作用是去重,但是需要先排序

void test6()
{list<int> lt{2,6,5,2,2,2,2};lt.sort();lt.unique();// 5,6
}



remove

void remove (const value_type& val);

remove的作用是先找到所有val的位置,然后erase掉所有的val

void test6()
{list<int> lt{1,2,3,4,5,6,6,7,8};//移除元素6lt.remove(6);//1,2,3,4,5,7,8
}



splice


void splice (iterator position, list& x);void splice (iterator position, list& x, iterator i);void splice (iterator position, list& x, iterator first, iterator last);

splice的作用是转移节点

  • void splice (iterator position, list& x),将x链表中的所有元素转移到position位置
  • void splice (iterator position, list& x, iterator i),将x链表中i位置的元素转移到position位置
  • void splice (iterator position, list& x, iterator first, iterator last),将x链表中[first,last)中的元素转移到position位置
void test7()
{list<int> lt1{ 1,2,3,4,5,6,7 };list<int> lt2{ 0,0 };lt2.splice(++lt2.begin(), lt1);for (auto e : lt1){cout << e << " ";}//lt1中的元素转移空了cout << endl;for (auto e : lt2){cout << e << " ";}//0 1 2 3 4 5 6 7 0cout << endl;list<int> lt3{ 1,2,3,4,5,6,7 };list<int> lt4{ 0,0 };lt4.splice(++lt4.begin(), lt3, ++lt3.begin());for (auto e : lt3){cout << e << " ";}//1 3 4 5 6 7cout << endl;for (auto e : lt4){cout << e << " ";}//0 2 0cout << endl;list<int> lt5{ 1,2,3,4,5,6,7 };list<int> lt6{ 0,0 };lt6.splice(++lt6.begin(), lt5,++++lt5.begin(), --lt5.end());for (auto e : lt5){cout << e << " ";}//1 2 7cout << endl;for (auto e : lt6){cout << e << " ";}//0 3 4 5 6 0cout << endl;
}
http://www.yayakq.cn/news/173833/

相关文章:

  • 网站的seo优化怎么做做外链选择那些网站
  • 北京中御建设公司网站视频制作公司需要什么资质
  • 分享一个网站能用的网站置顶代码
  • 国外专门做杂志的共享网站wordpress二手车模板
  • 做网站违法吗网站建设和管理
  • 网站建设内容清单怎么做那些盗号网站
  • 如何做网站超链接即时设计网页版
  • 有没有介绍做私家导游的网站网络营销服务有哪些
  • 网站特效怎么做重庆建设官网
  • 昌吉州住房和城乡建设局网站网易游戏推广代理加盟
  • 天心区网站建设公司河南商城网站建设
  • 能被百度收录的建站网站wordpress怎么填写
  • 网上购物网站的设计与实现网站 主机
  • 深圳营销建网站公司怎么制作网站教程视频
  • ps做网站原形wordpress页面还原
  • 股票可以做网站推广吗专业制作
  • 什么行业需要做网站郑州哪里教做网站
  • 二级网站 备案wordpress多站点版
  • 重庆网站建设的价格开发系统需要什么技术
  • 免费注册个人网站不花钱设计官网和推广的公司
  • 山西教育平台网站建设网站服务
  • 廊坊企业免费建站网页设计大概需要多少钱
  • 商业网站制作定制一个网站多少钱
  • 旅行网站的建设目录物流加盟信息网站
  • 浙江建设集团网站网站建设需要哪些方面
  • 在阿里巴巴做网站石河子网站建设
  • 那个网站做拍手比较好精美图片做网站上哪儿去找图
  • 网站开发流程知乎重庆市建设工程信息网官网安全监督信息网
  • qq刷赞网站推广24淘宝网站建设
  • 上蔡网站建设公司织梦手机网站标签调用大全