个网站做淘宝客推广可以吗,古镇高端网站建设,城乡建设网站,电商seo搜索优化一、什么是list list是一个可以在序列的任意位置进行插入和删除的容器#xff0c;并且可以进行双向迭代。list的底层是一个双向链表#xff0c;双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置。通过将每个元素与前一个元素的链接和后一个元素的链接关联起来并且可以进行双向迭代。list的底层是一个双向链表双向链表可以将它们包含的每个元素存储在不同且不相关的存储位置。通过将每个元素与前一个元素的链接和后一个元素的链接关联起来内部保持了顺序。
二、list的构造
构造函数接口说明list(size_type n,const value_type val valur_type())为构造的list初始化n个空间并根据第二个参数进行初始化list()构造空的listlist(const list* x)拷贝构造函数list(Inputlterator first, Inputlterator last)使用迭代器区间中的元素进行初始化
函数原型
explicit list ();explicit list (size_type n, const value_type val value_type());template class InputIteratorlist (InputIterator first, InputIterator last);list (const list x);
list的构造使用
#includeiostream
#includelist
#includestring
using namespace std;int main()
{string s(hello world);listint first;//无参构造listint second(10, 1);//构造的list中包含10个1listint third(s.begin() 5, s.end());//迭代器构造listint fourth(third);//拷贝构造函数return 0;
}
三、list的迭代器 迭代器按照访问方式可以分为以下三种
前向迭代器Forward Iterators它支持多次遍历只能递增不能递减。双向迭代器Bidirectional Iterators与前向迭代器类似但是既能递增也能递减。随机迭代器Random Access Iterators它支持所有双向迭代器的操作支持跳过元素支持下标访问支持比较操作。 list的迭代器属于双向迭代器也就是说list不能像vector和数组那样通过[]进行访问。
函数声明接口说明beginendbegin返回第一个元素的迭代器end返回逻辑上最后一个元素之后的位置rbeginrendrbegin返回最后一个元素的迭代器这个迭代器指向的是理论上位于容器第一个元素之前的元素即它不指向容器中的任何实际元素。
函数原型为
iterator begin() noexcept;
const_iterator begin() const noexcept;iterator end() noexcept;
const_iterator end() const noexcept;reverse_iterator rbegin() noexcept;
const_reverse_iterator rbegin() const noexcept;reverse_iterator rend() nothrow;
const_reverse_iterator rend() const nothrow;
迭代器的使用
#includeiostream
#includelist
#includestring
using namespace std;int main()
{string s(hello world);listchar first(s.begin(), s.end());listchar::iterator it first.begin();listchar::reverse_iterator r_it first.rbegin();cout 正向迭代器;while (it ! first.end()){cout *it ;it;}cout endl;cout 反向迭代器;while (r_it ! first.rend()){cout *r_it ;r_it;}
} 输出结果为 四、list的容量相关
函数声明 接口说明empty检测list是否为空是返回true否则返回falsesize返回list中有效节点的个数
函数原型为
size_type size() const noexcept;bool empty() const noexcept;
函数使用
#includeiostream
#includelist
#includestring
using namespace std;int main()
{listint first;listint second(10, 1);cout first.empty() endl;cout second.empty() endl;cout first.size() endl;cout second.size() endl;
}
五、list的访问
函数声明接口说明front返回lsit的第一个节点的值的引用back返回list的最后一个节点的值的引用
函数原型为
reference front();
const_reference front() const;reference back();
const_reference back() const; 函数使用
#includeiostream
#includelist
#includestring
using namespace std;int main()
{string s(hello world);listchar first(s.begin(),s.end());cout first.front() first.back();
} 输出结果为: 六、list的修改
函数声明接口说明push_front在list首元素前插入一个值pop_front删除list中的第一个元素push_back在尾部插入一个值pop_back删除list的最后一个元素insert在给定的迭代器对应位置插入元素erase删除迭代器对应的元素swap交换两个list中的元素
push_front和pop_front
函数原型
void push_front (const value_type val);
void push_front (value_type val);void pop_front();函数使用
#includeiostream
#includelist
#includestring
using namespace std;int main()
{string s(hello world);listchar first(s.begin(),s.end());first.push_front(k);cout first.front() endl;first.pop_front();cout first.front() endl;
}输出结果 push_back和pop_back
函数原型
void push_back (const value_type val);
void push_back (value_type val);void pop_back();
函数使用
#includeiostream
#includelist
#includestring
using namespace std;int main()
{string s(hello world);listchar first(s.begin(),s.end());first.push_back(k);cout first.back() endl;first.pop_back();cout first.back() endl;
}
输出结果 insert函数
函数原型
iterator insert (const_iterator position, const value_type val);iterator insert (const_iterator position, size_type n, const value_type val);template class InputIterator
iterator insert (const_iterator position, InputIterator first, InputIterator last);
函数使用
#includeiostream
#includelist
#includestring
using namespace std;int main()
{string s(hello world);listchar first(s.begin(),s.end());first.insert(first.begin(), c);first.insert(first.begin(), 10, c);first.insert(first.begin(), s.begin(), s.end());
}erase函数
函数原型
iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);
函数使用
#includeiostream
#includelist
#includestring
using namespace std;int main()
{string s(hello world);listchar first(s.begin(),s.end());first.erase(first.begin(), first.end());
}
swap函数
函数原型
void swap (list x);
函数使用
#includeiostream
#includelist
#includestring
using namespace std;int main()
{string s(hello world);listchar first(s.begin(),s.begin() 5);listchar second(s.begin() 5, s.end());first.swap(second);
}七、list的操作
函数声明接口说明reverse反转容器中元素的顺序sort排序list中的元素默认升序merge合并两个列表它们必须是有序的unique消除列表中的重复元素必须是有序的remove移除给定的元素splice将一个列表中的一个或一部分元素转移到另一个元素中
reverse函数
函数原型
void reverse() noexcept;
函数使用
#include list
#include iostream
using namespace std;int main() {listint first { 1, 3, 5 };first.reverse();for (auto i : first){cout i ;}
}
输出结果为 sort函数
函数原型
void sort();template class Comparevoid sort (Compare comp);
函数使用
#include list
#include iostream
using namespace std;int main() {listint first { 4,5,2,1,7,5,9 };first.sort();//默认升序//也可以写成first.sort(lessint());for (auto i : first){cout i ;}cout endl;first.sort(greaterint());//改为降序for (auto i : first){cout i ;}
} 输出结果 merge函数
函数原型
void merge (list x);template class Comparevoid merge (list x, Compare comp); comp是一个比较函数或比较器它接受两个参数并返回一个布尔值指示第一个参数是否应该在排序顺序中排在第二个参数之前。这个比较函数应该产生一个严格的弱排序。该函数将参数列表中序列x中的所有元素合并到当前列表中同时保持排序顺序。两个列表在合并操作之前都必须根据comp提供的比较标准进行排序。
函数使用
#include list
#include iostream
using namespace std;int main() {listint first { 1, 3, 5 };listint second { 2, 4, 6 };// 使用自定义比较函数将 list2 合并到 list1first.merge(second, lessint());// 打印合并后的列表for (int num : first) {cout num ;}cout endl;// 合并后 list2 应该为空if (second.empty()) {cout 合并后second 为空。 endl;}return 0;
}
输出结果为 unique函数
函数原型
void unique();template class BinaryPredicatevoid unique (BinaryPredicate binary_pred);
函数使用
#include list
#include iostream
using namespace std;
int main() {std::listint first { 1, 2, 2, 3, 3, 3, 4, 4, 5 };first.unique();// 打印列表for (int num : first) {std::cout num ;}cout std::endl;// 使用带参数版本的 unique 函数listint second { 1, 2, 2, 3, 3, 3, 4, 4, 5 };second.unique(std::equal_toint());// 打印列表for (int num : second) {std::cout num ;}std::cout std::endl;return 0;
}
输出结果为 remove函数
函数原型
void remove (const value_type val);
函数使用
#include list
#include iostream
using namespace std;
int main() {std::listint first { 1, 2, 2, 3, 4, 2, 5 };first.remove(2);for (int num : first) {cout num ;}cout endl;return 0;
}
输出结果 splice函数
函数原型
void splice (const_iterator position, list x);void splice (const_iterator position, list x, const_iterator i);void splice (const_iterator position, list x,const_iterator first, const_iterator last);代码使用
#include list
#include iostream
using namespace std;int main() {listint first { 1, 2, 3 };listint second { 4, 5, 6 };first.splice(first.end(), second);cout first: ;for (int num : first) {cout num ;}cout endl;first.splice(first.end(), first, next(first.begin(), 1));cout first after moving second element: ;for (int num : first) {cout num ;}cout endl;first.splice(second.end(), first, first.begin(), next(first.begin(), 3));cout second after moving elements: ;for (int num : second) {cout num ;}cout endl;return 0;
}
输出结果为