STL库基础学习

STL库基础学习目录1.什么是STL库2.几种常见的STL模板(1)vector1.vector向量模板2.vector迭代器3.常见方法与用法(2)list(3)queue和stack(4)set和map3.几种STL的时间复杂度比较1.什么是STL库◦STL又称为标准模板库,是一套功能强大的C++模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。◦也就是说,有了STL,数据结…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

目录

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
当中的元素,简单地说,迭代器可以认为是指向某个元素的指针。同样所有支持访问所有元素类模板都有自己的迭代器。
#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库基础学习

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:
判断向量是否为空,若为空,则向量中无元素

演示:

#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库基础学习

(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库基础学习

 

 

 

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • SQL Server2012 安装方法详解[通俗易懂]

    首先要找到自己下载好的安装包,并且保持网络畅通。双击setup.exe。稍微等待大概一分钟时间,会出现提示(在安装过程中,会多次出现如下提示,只需要耐心等待就好了。我之后就不一一例出来了)。在我们安装SQLServer之前需要先检查下电脑配置。请点击“系统配置检查器”进行检查。出现“已通过”的提示则可以进行安装。点击确定进行安装(这里有的人的电脑在“重新启动计算机”会显示不通过。方法

  • Python 爬虫 校花网[通俗易懂]

    Python 爬虫 校花网[通俗易懂]爬虫:是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。福利来了校花网 ,首先说为什么要爬这个网站呢,第一这个网站简单爬起来容易,不会受到打击,第二呢你懂得…。1.第一步

  • Elastic Job 入门详解

    Elastic Job 入门详解Elastic job是当当网架构师张亮,曹昊和江树建基于Zookepper、Quartz开发并开源的一个Java分布式定时任务,解决了Quartz不支持分布式的弊端。Elastic job主要的功能有支持弹性扩容,通过Zookepper集中管理和监控job,支持失效转移等,这些都是Quartz等其他定时任务无法比拟的。

  • phpspreadsheet 读取 Excel 表格问题

    phpspreadsheet 读取 Excel 表格问题要读取大量数据,需要ReadFilter,指定读取范围,下面是我的ReadFilter类<?phpnamespacecommon\models;classMyExcelReadFilterimplements\PhpOffice\PhpSpreadsheet\Reader\IReadFilter{private$startRowNo;//如1private$endRowNo;//如1000private$

  • ribbon默认的负载均衡策略_集群负载均衡策略

    ribbon默认的负载均衡策略_集群负载均衡策略官方文档指出:自定义的负载均衡配置类不能放在@componentScan所扫描的当前包下及其子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,也就是说我们达不到特殊化定制的目的了;要求自定义的算法:依旧是轮询策略,但是每个服务器被调用5次后轮到下一个服务,即以前是每个服务被调用1次,现在是每个被调用5次。打开消费者工程:1、自定义算法类必须继承AbstractLoadBalanceRule类启动类在com.bruce.springcloud包下,所以我们新建一个包:

  • redhat配置yum源服务器_redhat7网络yum源配置

    redhat配置yum源服务器_redhat7网络yum源配置配置yum源redhat默认自带的yum源需要注册才能更新,可以更换成Centos的yum源.文章目录配置yum源前言一、yum源的工作原理?二、yum配置步骤1.查看系统已经安装的yum2.删除自带的yum包3.下载相关的安装包4.安装包5.下载配置文件6.更新前言Yum(全称为YellowdogUpdater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号