前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STL库基础学习

STL库基础学习

作者头像
全栈程序员站长
发布2022-11-03 15:41:19
8430
发布2022-11-03 15:41:19
举报
文章被收录于专栏:全栈程序员必看

目录

1.什么是STL库

2.几种常见的STL模板

(1)vector

1.vector向量模板

2.vector迭代器

3.常见方法与用法

(2)list

(3)queue和stack

(4)set和map

3.几种STL 的时间复杂度比较


1.什么是STL库

◦ STL 又称为标准模板库,是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。

◦ 也就是说,有了 STL ,数据结构中很多东西不要再需要自己去手写,而是可以自己去调用 STL 去帮你完成相关的功能

◦ 无论是在算法竞赛中还是往后工作写项目中,都会大量使用 STL 中的功能, STL 可以很大程度上减轻你的工作量,并且内置的异常处理可以让你更清楚的看到你所犯下的错误。

2.几种常见的STL模板

◦ 现在,我来介绍 STL 中常用的一些模板类 (vector, list, queue, stack, set, map)。

(1)vector

1.vector向量模板

一、什么是vector?

◦ 向量( Vector )是一个封装了动态大小数组的顺序容器( Sequence Container )。与后面要介绍的类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

二、容器特性

1.顺序序列

◦ 顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。

2.动态数组

◦ 支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。提供了在序列末尾相对快速地添加 / 删除元素的操作。

3.能够感知内存分配器的(Allocator-aware)

◦ 容器使用一个内存分配器对象来动态地处理它的存储需求。

2.vector迭代器

◦ vector<T>::iterator 为 vector 迭代器变量类型,利用迭代器,我们可以去直接写入,删除,访问 vector 当中的元素,简单地说,迭代器可以认为是指向某个元素的指针。同样所有支持访问所有元素类模板都有自己的迭代器。

代码语言:javascript
复制
#include <iostream>
#include <vector>
//所有的STL模板都是在std命名空间下的,若要简写,则必须使用using namespace std;
using namespace std;
int main()
{
	vector<int>vec;
	//向vec数组当中插入三个元素0,1,2
	vec.push_back(0);
	vec.push_back(1);
	vec.push_back(2);
	//迭代器从vector容器开头,遍历到结尾,并依次输出迭代器所指向的元素
	for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++)
	{
		cout << *iter << endl;
	}
	return 0;
}

运行结果

STL库基础学习
STL库基础学习

3.常见方法与用法

◦ vector 重载 [] 的运算符,利用 (vector 变量 )[index] 可以访问和修改第 index 处的元素

添加函数

◦ void push_back (const T& x): 向量尾部增加一个元素 x

◦ iterator insert(iterator it,const T& x): 向量中迭代器指向元素前增加一个元素 x

删除函数

◦ iterator erase(iterator it): 删除向量中迭代器指向元素

◦ iterator erase(iterator first,iterator last): 删除向量中 [ first,last ) 中元素

◦ void pop_back (): 删除向量中最后一个元素

◦ void clear(): 清空向量中所有元素

迭代器函数

◦ iterator begin(): 返回向量头指针,指向第一个元素

◦ iterator end(): 返回向量尾指针,指向向量最后一个元素的下一个位置

属性函数:

◦ int size() const: 返回向量中元素的个数

◦ bool empty() const: 判断向量是否为空,若为空,则向量中无元素

演示:

代码语言:javascript
复制
#include <iostream>
#include <vector>
//所有的STL模板都是在std命名空间下的,若要简写,则必须使用using namespace std;
using namespace std;
int main()
{
	vector<int>vec;
	//将vec长度预定义为100
	vec.resize(100);
	for (int i = 0; i < 100; i++)
	{
		vec[i] = i;
	}
	//vec.size()返回vec的长度
	for (int i = 0; i < vec.size(); i++)
	{
		vec[i] *= 2;
	}
	//定义iter迭代器,初始化指向vec的开头
	vector<int>::iterator iter = vec.begin();
	//iter向后移动一个单位
	iter++;
	//删除iter所指向的元素
	vec.erase(iter);
	//输出
	cout << '[';
	for (int i = 0; i < vec.size(); i++)
	{
		cout << vec[i];
		if (i == vec.size() - 1)
			cout << ']';
		else
			cout << ",";
	}
	return 0;
}

运算结果:

STL库基础学习
STL库基础学习

(2)list

◦ list 同样是顺序储存的类模板,但是从底层实现上来看,他本质是一个双向链表,不支持随机去访问当中的元素,但是在插入,删除元素的时间复杂度上远低于 vector 类模板

◦ 常用函数与 vector 当中部分相似或相等,这里不逐一介绍,具体可以在百度或谷歌搜索 C++ list 的用法

(3)queue和stack

◦ queue 功能与我们在数据结构当中所学的队列相似,是一个只能从尾部插入,顶部弹出的类模板

◦ stack 功能与我们在数据结构中所学的栈相似,是一个只能从顶部插入和弹出的模板.

(4)set和map

◦ set 和 map 中没有顺序的概念,因为在底层实现上是红黑树,而非顺序结构

◦ set 和 map 中去找到我们所要找到的值相当快速,时间复杂度为 O( logn )

◦ set 和 map 中不会出现重复的元素,如果插入已经存在的元素则不会发生任何改变

◦ set 和 map 拥有自己迭代器,因为底层实现的特性,访问得到的元素序列是已经排好序的

◦ set 和 map 唯一的区别是 set 是集合囊括所有插入的元素, map 不仅囊括所有插入的元素,同时这些元素还作为索引,指向其对应的值.

3.几种STL 的时间复杂度比较

STL库基础学习
STL库基础学习

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181546.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.什么是STL库
  • 2.几种常见的STL模板
    • (1)vector
      • 1.vector向量模板
      • 2.vector迭代器
      • 3.常见方法与用法
    • (2)list
      • (3)queue和stack
        • (4)set和map
        • 3.几种STL 的时间复杂度比较
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档