贵州微信网站建设,化妆品网站建设描述,wordpress dux商城,简约好看的ppt模板免费下载目录
一、list
1.1list的定义和结构
以下是一个示例#xff0c;展示如何使用list容器:
1.2list的常用函数
1.3list代码示例
二、stack
2.1stack的定义和结构
stack的常用定义
2.2常用函数
2.3stack代码示例 一、list 1.1list的定义和结构
list的使用频率不高#…目录
一、list
1.1list的定义和结构
以下是一个示例展示如何使用list容器:
1.2list的常用函数
1.3list代码示例
二、stack
2.1stack的定义和结构
stack的常用定义
2.2常用函数
2.3stack代码示例 一、list 1.1list的定义和结构
list的使用频率不高在做题时极少遇到需要使用list的情景。ist是一种双向链表容器它是标准模板库(STL)提供的一种序列容器。list容器以节点(node)的形式存储元素并使用指针将这些节点链接在一起形成一个链表结构。list容器的定义和结构如下
template class T, class Allocator std::allocatorTclass list;
list容器模板接受两个参数
T:指定容器中存储的元素类。Allocator (可选):指定用于分配内存的分配器类型默认为std::allocatorT。
list容器的特点包括:
双向性:每个节点都包含指向前一个节点和后一个节点的指针因此可以在常数时间内在链表中的任意位置进行插入、删除和访问操作。动态大小: 链表的大小可以根居需要动态扩展或收缩不需要预先指定容器的大小不连续存储:链表中的节点可以在内存中的任意位置分布不要求连续存储因此插入和删除操作不会导致元素的移动。list与其他标准序列容器arrayvector和deque相比list通常可以在容器内的任何位置插入、提取和移动元素。list与其他标准序列容器arrayvector和deque相比list和forward_list单链表实现的主要缺点是他们不能通过位置直接访问元素例如要访问列表中的第五个元素必须从已知位置开始或结束迭代到该位置需要线性时间开销。存储密度低list要使用一些额外的内容空间nextprev来保持与每个元素相关联前后续的线性的链接信息从而导致存储小元素类型如charshortint等的列表的存储密度低。
list容器提供了一系列成员函数和迭代器来操作和访问链表中的元素包括插入、删除、访问、反转等操作。可以使用迭代器来遍历链表中的元素。
以下是一个示例展示如何使用list容器:
#includeiostream
#includelistusing namespace std;int main()
{listint myList;//在链表尾部插入元素myList.push_back(1);myList.push_back(2);myList.push_back(3);//在链表头不插入元素myList.push_front(0);//遍历链表并输出元素for (int num : myList) {cout num ;}cout endl;return 0;
} 在上述示例中我们首先创建了一个list容器myList然后使用push_back()和push_front()函数分别在链表尾部和头部插入元素。最后使用范围基于范围的for循环遍历链表并输出元素。需要注意的是由于list是双向链表因此插入和删除操作的时间复杂度是常量时间O(1)但访问和查找操作的时间复杂度是线性时间O(n)其中n是链表的大小。因此如果需要频繁进行随机访问操作可能更适合使用支持随机访问的容器如vector或deque。
随机访问begin()idex得到迭代器
1.2list的常用函数
list容器提供了多个常用的成员函数来操作和访问链表中的元素以下是一些常用的list函数的解释:
push _back():将元素插入到链表的末尾。push front():将元素插入到链表的开头。pop back():移除链表末尾的元素。pop_front():移除链表开头的元素。size():返回链表中元素的个数。empty():检查链表是否为空。clear():清空链表中的所有元素。front():返回链表中第一个元素的引用。back():返回链表中最后一个元素的引用。begin(): 返回指向链表第一个元素的迭代器。end(): 返回指向链表末尾的下一个位置的迭代器。insert():在指定位置之前插入一个或多个元素。.erase():从链表中移除指定位置的一个或多个元素。 1.3list代码示例
在代码中我们向myList的尾部添加了5个元素从1到5。
int main()
{//创建一个Listint对案myListlistint myList;//向myList尾部添加元素for (int i 1; i 5; i){myList.push_back(i);}
然后我们使用范围for循环遍历myList并输出其中的元素。输出结果为1 2 3 4 5 。
// 从头到尾输出myList中的元素for (const auto i : myList)cout i ;cout \n;
使用reverse函数将myList中的元素反转并输出反转后的结果。输出为5 4 3 2 1 。
//将myList中的元素反转reverse(myList.begin(), myList.end());for (const auto i : myList)cout i ;cout \n;
再使用myList.begin()获取链表的第一个迭代器然后使用操作符将其移动到第二个元素的位置。接着我们使用insert函数在这个位置插入元素0。输出结果为5 0 4 3 2 1 。
//在第一个元素的后一个位置加上元素0myList.insert(myList.begin(), 0);
删除链表中的一部分元素。myList.begin()将迭代器移动到链表的第三个元素而--myList.end()将迭代器移动到链表的倒数第二个元素之前的位置。因此这行代码将删除从第三个元素到倒数第二个元素之间的所有元素。
for (const auto i : myList)cout i ;cout \n;myList.erase(myList.begin(), -- myList.end());//输出myList的大小cout 链表大小为: myList.size() \n;//从头到尾输出myList中的元素for (const auto i : myList)cout i ;cout \n;
int main()
{//创建一个Listint对案myListlistint myList;//向myList尾部添加元素for (int i 1; i 5; i){myList.push_back(i);}// 从头到尾输出myList中的元素for (const auto i : myList)cout i ;cout \n;//将myList中的元素反转reverse(myList.begin(), myList.end());for (const auto i : myList)cout i ;cout \n;//在第一个元素的后一个位置加上元素0myList.insert(myList.begin(), 0);for (const auto i : myList)cout i ;cout \n;myList.erase(myList.begin(), -- myList.end());//输出myList的大小cout 链表大小为: myList.size() \n;//从头到尾输出myList中的元素for (const auto i : myList)cout i ;cout \n;
} 二、stack
2.1stack的定义和结构
在C中stack是一个标准库容器它提供了后进先出LIFO, Last In First Out的数据结构。stack容器只允许在序列的同一端称为栈顶进行插入和删除操作。stack没有迭代器因此你不能像遍历其他容器如vector或list那样遍历stack。相反你只能查看栈顶元素、向栈中添加元素或从栈中移除元素。
stack提供了一组函数来操作和访问元素但它的功能相对较简单。stack的定义和结构如下 (仅作了解即可)
template class T, class Container dequeT
class stack;
T:表示存储在stack中的元素的类型
Container: 表示底层容器的类型默认为deque。也可以使用其他容器类型如vector或list、stack的内部实现使用了底层容器来存储元素并且只能通过特定的函数来访问和操作元素。
stack的常用定义
//stack的定义
stackints1; //定义一个储存数据类型为int的stack容器s1
stackdoubles2; //定义一个储存数据类型为double的stack容器s2
stackstrings3; //定义一个储存数据类型为string的stack容器s3
stack结构体类型s4; //定义一个储存数据类型为结构体类型的stack容器s4
stackint s5[N]; //定义一个储存数据类型为int的stack容器数组,N为大小
stackint s6[N]; //定义一个储存数据类型为int的stack容器数组,N为大小 2.2常用函数
stack不能遍历
函数描述时间复杂度push(x)在栈顶插入元素 x0(1)pop弹出栈顶元素 0(1)top返回栈顶元素 0(1)empty检查栈是否为空 0(1)size返回栈中元素的个数0(1)
小tips: 如果将一个数组的元素依次放入栈再依次取出则可以将数组翻转。
2.3stack代码示例
#includeiostream
#includestackusing namespace std;int main()
{stackintmyStack;//向栈中插入元素myStack.push(10);myStack.push(20);myStack.push(30);myStack.push(40);//获取栈顶元素cout 栈顶元素 myStack.top() endl;//弹出栈顶元素myStack.pop();//再次获取栈顶元素cout 弹出一个元素后的栈顶元素 myStack.top() endl;//检查栈是否为空if (myStack.empty()) {cout 栈为空 endl;}else {cout 栈不为空 endl;}//获取栈的大小cout 栈的大小 myStack.size() endl;return 0;
} 今天就先到这了 看到这里了还不给博主扣个 ⛳️ 点赞☀️收藏 ⭐️ 关注
你们的点赞就是博主更新最大的动力 有问题可以评论或者私信呢秒回哦。