C++编程学习(十二) STL
一、简介
标准模板库STL,是一组模板类和函数。提供了:
1、容器。用于存储信息。
2、迭代器。用于访问容器中的信息。
3、算法。操作容器内容。
1、容器
STL有两种类型的容器类:
(1)顺序容器
std::vector。动态数组。
std::deque。和vector类似。
【vector和deque区别】
① deque使用不止一块内存(而vector必须使用一块连续内存),所以传地址需要注意
② 除了头尾两端,在任何地方安插或删除元素,都将导致指向deque元素的所有pointers、references、iterators失效。
③ deque的动态数组头尾都开放,允许在开头插入或者删除元素。
std::list。双向链表。
std::forward_list。单向链表。
(2)关联函数
std::set。存储各不相同的值,并在插入时候进行排序。复杂度为对数。
std::unordered_set。功能等同于set。但复杂度为常数。(C++11新增)
std::multiset。存储值,并在插入时候进行排序。但是值可以是相同的,即值不需要唯一。
std::unordered_multiset。与unordered_set类似,但是允许存储多个值相同的项,即值不需要唯一。(C++11新增)
std::map。存储键值对,并根据唯一的键排序。复杂度为对数。
std::unordered_map。存储键值对,并根据唯一的键排序。复杂度为对数。(C++11新增)
std::multimap。与map类似,但是键不要求唯一。
std::unordered_multimap。与unordered_map类似,但是键不要求唯一。(C++11新增)
此外还提供了:
(3)容器适配器。
std::stack。后进先出。在栈顶压入或者弹出元素。
std::queue。先进先出。可以删除最先插入的元素。
std::priority_queue。优先级队列,优先级最高的元素排在队列开头。
2、迭代器
最简单的迭代器是指针。STL迭代器可以理解为模板类的一部分,是一种泛型指针。算法为模板函数,迭代器让模板函数能够无缝地处理容器。
(1)输入迭代器
通过对输入迭代器解除引用,它将引用对象。
(2)输出迭代器
执行写入操作。
3、算法
常用的STL算法如下:
std::find。在集合中查找值。
std::find_if。根据条件查找值。
std::reverse。反转顺序。
std::remove_if。根据条件反转顺序。
std::transform。根据用户定义的变换函数对容器中的元素进行变换。
除了上面的,STL还提供了一个操纵字符串的模板类std::basic_string<T>。具体化为std::string和std::wstring。
C++编程学习(十二) STL的更多相关文章
- Linux网络编程学习(十二) ----- 结语
该书提前看完了,重点看了第四章和第六章,第七章以后只是大致浏览了一下,如果以后工作中涉及这一块再仔细研究一下,大概花了二十天的样子,主要了解了进程间的通信方式.socket编程以及五种I/O模式,看的 ...
- (转)SpringMVC学习(十二)——SpringMVC中的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...
- 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- Scala学习十二——高阶函数
一.本章要点 在Scala中函数是”头等公民“(可以作为参数,返回值,赋值给其他); 可以创建匿名函数,通常还会交给其他函数; 函数参数可以给出需要稍后执行的行为; 许多集合方法都接受函数参数,将函数 ...
- Java编程思想学习(十二) 数组和容器
一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的 ...
- JVM学习十二:JVM之性能监控工具
前面我们学习了很多JVM相关的理论知识,那么本节将重点讲述的是工具的使用,正所谓:工欲善其事,必先利其器.因此,本节介绍常用的性能监控工具,用于性能监控和问题排查. 一.系统性能监控 系统性能工具用于 ...
- 通过Socket实现TCP编程(十二)
原文链接:https://www.cnblogs.com/hysum/p/7531529.html Socket通信 : TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 基于TCP ...
- Dart语言学习(十二) Dart面向对象
Dart作为一种高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式. 基于mixin的继承方式是指:一个类可以继承自多个父类,相当于其他语言里的多继承. 所有的类都有同一个基类Obje ...
- 【读书笔记】C#高级编程 第二十二章 安全性
(一)身份验证和授权 安全性的两个基本支柱是身份验证和授权.身份验证是标识用户的过程,授权在验证了所标识用户是否可以访问特性资源之后进行的. 1.标识和Principal 使用标识可以验证运行应用程序 ...
- java web 学习十二(session)
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
随机推荐
- springBoot+MybatisPlus数据库字段使用驼峰命名法时报错
假如有个实体类: package com.jeff.entity; public class User { /** * 主键id */ private Integer id; /** * 登陆名 */ ...
- 虚拟机下修改ip配置
// centos ip 配置vim /etc/sysconfig/network-scripts/ifcfg-eth0 // 虚拟机下删除里面的内容vim /etc/udev/rules.d/70- ...
- 修改html内联样式的方法
问题:如下图弹出页面操作不了 分析:审查元素,发现是内联元素样式z-index:19891015导致的,修改内联元素样式z-index:0发现可以操作了 解决方法:内联样式优先级高,再引入css覆盖样 ...
- https和http的主要区别
HTTPS和HTTP的区别主要如下: 1.https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用. 2.http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输 ...
- 数据包报文格式(IP包、TCP报头、UDP报头)
转自: https://blog.51cto.com/lyhbwwk/2162568 一.IP包格式 IP数据包是一种可变长分组,它由首部和数据负载两部分组成.首部长度一般为20-60字节(Byte) ...
- Controller层注解
/** * Copyright © 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite< ...
- Java开发神器Lombok的使用与原理
在面向对象编程中必不可少需要在代码中定义对象模型,而在基于Java的业务平台开发实践中尤其如此.相信大家在平时开发中也深有感触,本来是没有多少代码开发量的,但是因为定义的业务模型对象比较多,而需要重复 ...
- 对iOS开发的一些认识
从事iOS工作这么久了,我觉得对它的认识也越来越深刻.尤其是越发明白自己从事的工作属于“客户端开发”.“软件工程”分类中. 我更喜欢“客户端开发”这个词语,相对“前端开发”而言.因为前者更能充分说明面 ...
- 【剑指Offer面试编程题】题目1369:字符串的排列--九度OJ
题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入: 每个 ...
- 爱屋吉屋官网、APP停运!互联网房屋中介真的迎来了至暗时刻吗?
2018年底到2019年初,全球较差的经济大环境终于引来爆炸式的连锁反应.仅从国内的互联网行业来看,很多企业在浪潮退去后都只是在"裸泳".比如被爆料2018年全年亏损109亿元,且 ...