广安做网站的公司/北京如何优化搜索引擎
一、什么是list?
Lists are sequence containers that allow constant time insert and erase operations anywhere within the sequence, and iteration in both directions.
列表是序列容器,允许在序列中的任何位置进行以常量时间插入和擦除操作,以及双向迭代。
简单的来说:list是一个带头双向循环列表;
二、list的使用
2.1 list的构造
list的默认构造:
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
#include <list>
int main()
{list<int> list1;return 0;
}
2.2 、用n的val构造:(其中val的类型是list模版显式实例化的类型)
int main()
{//list<int> list1;list<int> list1(3, 3);list<string> list2(2, "hello");return 0;
}
2.3、 用迭代器区间构造
int main()
{//list<int> list1;//list<int> list1(3, 3);//list<string> list2(2, "hello");int arr[4] = { 3,4,5,6 };list<int> list1(arr, arr + sizeof(arr) / sizeof(int));return 0;
}
2.4、list的拷贝构造
int main()
{//list<int> list1;//list<int> list1(3, 3);//list<string> list2(2, "hello");int arr[4] = { 3,4,5,6 };list<int> list1(arr, arr + sizeof(arr) / sizeof(int));list<int> list2(list1);return 0;
}
拷贝后:
三、list的增删查改
3.1、尾插尾删
int main()
{list<int> list1;list1.push_back(1);list1.push_back(2);list1.push_back(3);list1.push_back(4);list1.push_back(5);list1.pop_back();for (auto e : list1){cout << e << " ";}cout << endl;return 0;
}
3.2 list的头插头删
int main()
{list<int> list1;list1.push_front(1);list1.push_front(2);list1.push_front(3);list1.push_front(4);list1.pop_front();for (auto e : list1){cout << e << " ";}cout << endl;return 0;
}
3.3 list 的任意位置插入
任意位置插入val:
int main()
{list<int> list1;list1.push_front(1);list1.push_front(2);list1.push_front(3);list1.push_front(4);list1.pop_front();for (auto e : list1){cout << e << " ";}cout << endl;list<int>::iterator it = list1.begin();++it;list1.insert(it, 6);for (auto e : list1){cout << e << " ";}return 0;
}
注意:第一个参数为const_iterator,第二个参数为list显式实例化的类型;
list的iterator是双向迭代器支持++ -- 但不支持+ -;
任意位置插入n个val:
int main()
{list<int> list1;list1.push_back(3);list1.push_back(4);list1.push_back(5);list1.push_back(6);list1.insert(list1.begin(), 3, 8);for (auto e : list1){cout << e << " ";}return 0;
}
3.4list的任意位置删除
任意位置删除:
int main()
{list<int> list1;list1.push_back(3);list1.push_back(4);list1.push_back(5);list1.push_back(6);list<int>::iterator it1 = list1.begin();it1++;it1 = list1.erase(it1);it1++;it1 = list1.erase(it1);for (auto e : list1){cout << e << " ";}cout << endl;//cout << *it1 << " ";//报错return 0;
}
注意:erase返回的是删除的节点下一个节点的迭代器!
四、list的其他成员函数;
4.1 remove函数
作用: 相当于 find + erase ,先查找找到的了就删除,找不到啥事不干;
int main()
{list<int> list1;list1.push_back(3);list1.push_back(4);list1.push_back(5);list1.push_back(6);list1.remove(5);list1.remove(99);for (auto e : list1){cout << e << " ";}return 0;
}
4.2 splice函数
作用: 把一个链表转移到另一个链表的某个节点下;
int main()
{list<int> list1;for (int i = 1; i <= 5; ++i){list1.push_back(i * 10);}for (auto e : list1){cout << e << " ";}cout << endl;list<int> list2;for (int i = 1; i <= 5; ++i){list2.push_back(i);}for (auto e : list2){cout << e << " ";}cout << endl;list<int> ::iterator it = list1.begin();++it;list1.splice(it, list2);for (auto e : list1){cout << e << " ";}cout << endl;return 0;
}
4.3merge函数
作用:归并两个链表
int main()
{list<int> list1;for (int i = 2; i < 6; ++i){list1.push_back(i);}for (auto e : list1){cout << e << " ";}cout << endl;list<int> list2;for (int i = 4; i < 9; ++i){list2.push_back(i);}for (auto e : list2){cout << e << " ";}cout << endl;list1.merge(list2);for (auto e : list1){cout << e << " ";}cout << endl;return 0;
}
注意:默认按升序归并;
以上是list的基本用法,如果对您有所帮助记得点赞收藏+关注哦!!谢谢!!!
咱下期见!!!