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

找个做网站的广州各区最新动态

找个做网站的,广州各区最新动态,做暖暖免费视频网站,中疾控新冠最新消息一、链表 1.1 什么是List? 在C语言中,我们需要使用结构体struct来进行List(链表)的实现: struct ListNode {DataType Data;//DataType是任意类型的变量定义struct ListNode* next;//指向下一个结点的指针变量 }; 与之前的vect…

一、链表

1.1 什么是List?

在C语言中,我们需要使用结构体struct来进行List(链表)的实现:

struct ListNode
{DataType Data;//DataType是任意类型的变量定义struct ListNode* next;//指向下一个结点的指针变量
};

与之前的vector不一样,List的存储是随机存储,不是一段的连续的空间,既然不是一段连续的空间,那就不能使用下标进行访问。在C++中可以直接使用list容器:

列表是序列容器,允许对序列中任意位置的恒定时间插入和擦除作,以及双向迭代。

1.2 list的构造

与vector一样,list的构造函数也是四个:

list<int> l1;                         // 构造空的l1
list<int> l2(4, 100);                 // l2中放4个值为100的元素
list<int> l3(l2.begin(), l2.end());  // 用l2的[begin(), end())左闭右开的区间构造l3
list<int> l4(l3);                    // 用l3拷贝构造l4

1.3 list的iterator的使用

在不清楚迭代器的本质之前,我们可以把迭代器看做一个指针,该指针指向list中的某个结点。

begin():返回一个迭代器,该迭代器指向列表容器中的第一个元素。

end(): 返回最后一个元素下一个位置的迭代器

迭代器的使用可以快速访问某个结点,begin与end为正向迭代器,对迭代器执行++操作,迭代器向后移动:

list<int> l5 = { 1,2,3,4,5 };
list<int>::iterator it = l5.begin();
while (it != l5.end())
{cout << *it << " ";++it;
}
cout << endl;// C++11范围for的方式遍历
for (auto& e : l5)cout << e << " ";cout << endl;

1.4 List中接口说明

1.4.1 容量(capacity)

empty():判断是否为空,即list是否为空:

list<int> l5 = { 1,2,3,4,5 };
list<int>::iterator it = l5.begin();
while (! l5.empty())
{cout << l5.front() << " ";l5.pop_front();
}
cout << endl;

size():返回list中有效节点的数量:

list<int> l5 = { 1,2,3,4,5 };
cout << l5.size() << endl;

1.4.2 list element access

front():返回list的第一个节点中值的引用:

list<int> l5 = { 1,2,3,4,5 };
cout << l5.front() << endl;

back():返回list的最后一个节点中值的引用:

list<int> l5 = { 1,2,3,4,5 };
cout << l5.back() << endl;

1.4.3 list modifiers 

push_front():在list首元素前插入值为val的元素:

pop_front():删除list中第一个元素:

push_back():在list尾部插入值为val的元素:

pop_back():删除list中最后一个元素:

insert(): 在list position 位置中插入值为val的元素:

	list<int> l5 = { 1,2,3,4,5 };//inster(8,l5.begin());auto it = l5.begin();++it;       // it points now to number 2         l5.insert(it, 10);                        // 1 10 2 3 4 5// "it" still points to number 2               l5.insert(it, 2, 20);                     //1 10 20 20 2 3 4 5 

插入时可以使用迭代器来进行位置插入,有三个构造函数:

l5.insert(it, 10);        // 在该位置插入一个                       
l5.insert(it, 2, 20);     // 在该位置插入多个               
std::vector<int> myvector(2, 30);
l5.insert(it, myvector.begin(), myvector.end());//在该位置插入另一种结构的迭代器

 erase():删除list position位置的元素:

1.5 迭代器失效问题

前面说过,此处大家可将迭代器暂时理解成类似于指针,迭代器失效即迭代器所指向的节点的无 效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。

int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
list<int> l(array, array + sizeof(array) / sizeof(array[0]));
auto it = l.begin();
while (it != l.end())
{// erase()函数执行后,it所指向的节点已被删除,因此it无效,在下一次使用it时,必须先给//其赋值l.erase(it);++it;
}

改正:

int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };list<int> l(array, array+sizeof(array)/sizeof(array[0]));auto it = l.begin();while (it != l.end()){l.erase(it++);    // it = l.erase(it);}

1.6 list解释

所学的list底层是一个双向带头循环的链表,如图:

 

 1.7 list与vector的对比

下去我们需要模拟实现list哦,需要明白底层原理,可以让我们更加清楚的使用容器。

http://www.dtcms.com/wzjs/279126.html

相关文章:

  • 网站如何制作的厦门seo公司到1火星
  • 网站的根目录百度排名查询
  • 规划院网站建设书长尾词在线挖掘
  • 企业站模板互联网营销案例分析
  • 网站推广软文范例软文营销成功案例
  • 网站开发与设计的实训场地12月10日新闻
  • 如何远程连接 网站 数据库今天中国新闻
  • 潍坊做网站优化广州全网推广
  • flask网站开发源码郴州seo快速排名
  • 百度权重高的网站长沙疫情最新数据消息
  • 怎么做百度提交入口网站什么叫软文推广
  • 网上三维展馆网站是怎么做的销售
  • 设计网站页面注意事项企业宣传片
  • 做网站推广多少钱网络推广平台有哪些渠道
  • 荥阳网站制作搜索引擎营销的英文缩写是
  • 4s店网站建设如何优化关键词搜索排名
  • 腾讯云 网站备案超级seo工具
  • 不用下载能直接进入的正能量网站网域名解析ip查询
  • 数据来源于网站怎么做参考文献平台怎么推广
  • 教育行业网站建设审批阿亮seo技术顾问
  • 给军方做网站套模板行不行国际时事新闻最新消息
  • 网站不备案如何让百度快速收录网站文章
  • wordpress piroboxseo方式包括
  • 我想卖东西去哪个网站站长之家综合查询工具
  • 抚州网站建设公司保定百度推广联系电话
  • 做损坏文档的网站推广赚钱的软件
  • 搭建电商平台 方案seo优化技术招聘
  • 专业做化妆品外包材的招聘网站今日头条新闻
  • 重庆腊肠怎么制作seo线上培训班
  • 黄页88网官网电话百度搜索排名优化