首页 > 编程语言 >侯捷C++STL源码分析

侯捷C++STL源码分析

时间:2023-06-07 10:45:15浏览次数:48  
标签:std 容器 cout STL ite 源码 time 侯捷 include

STL六大部件

  • 容器(Containers):放东西,需要占用内存。

  • 分配器(Allocators):支持容器。

  • 算法(Algorithms):操作容器里面的数据。

  • 迭代器(Iterators):容器和算法之间的桥梁,泛化的指针。

  • 适配器(A dapters)

  • 仿函数(Functors)

#include<vector>
#include<algorithm>
#include<functional>
#include<iostream>
using namespace std;
int main()
{
 int ia[6] = {27,210,12,47,109,83};
 vector<int,allocator<int>> vi(ia,ia+6)//vector<类型,分配器(/*一般不会写*/)>
 cout<<cout_if(vi.begin(),vi.end(),not1(bind2nd(less<int>(),40)));//其中cout_if为algorithm,not1为functionadapter(negator) bind2nd为functionadapter(binder) less<int>为functionobject
 return 0;
}

复杂度 Complexity,Big-oh

O(1)或O(c):常数时间(constant time)

O(n):称为线性时间(linear time)

O(log2 n)称为二次线性时间(sub—linlear time)

O(n*n)称为平方时间(quadratic time)

O(nnn)称为立方时间(cubic time)

O(2的n次方)称为指数时间

O(nlog2 n):

前闭后开区间

range-based for statement (since C++11)

for(decl:coll){
  statement  
}
for(int i :{2,3,57,9,13,17,19}){
    std::cout<<i<<std::endl;
}
std::vector<double> vec;
...
for(auto elem:vec){
   std::cout<<elem<<std::endl;
}
for(auto& elem:vec){
  elem *= 3;
}

auto key

list<string> c;
list<string>::iterator ite;
ite = ::find(c.begin,c.end(),target);

list<string> c;
....
auto ite = ::find(c.begin,c.end(),target);

容器——结构及分类

Sequence Contaioners(序列式容器)

Array:数组(c++11增加的,连续空间)

Vector:动态数组(分配器去处理)

Deque:双向队列(先进先出)

List:双向链表

Forward-List:单向链表

Associative Containers(关联式容器)适合快速查找

Set/Multiset(红黑树是高度平衡二叉树,Set放的元素不能重复,Multiset放的元素可以重复)

Map/Multimap(key:value)

Unordered Containers(HashTable)

标签:std,容器,cout,STL,ite,源码,time,侯捷,include
From: https://www.cnblogs.com/doubleconquer/p/17462371.html

相关文章

  • crc16校验C语言源码实例解析
    一概念:循环冗余码校验英文名称为CyclicalRedundancyCheck,简称CRC。它是利用除法及余数的原理来作错误侦测(ErrorDetecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现......
  • 基于JAVA的springboot+vue人事管理系统、员工工资管理系统,附源码+数据库+论文+PPT
    1、项目介绍考虑到实际生活中在人事管理方面的需要以及对该系统认真的分析,将系统权限按管理员和员工这两类涉及用户划分。(a)管理员;管理员使用本系统涉到的功能主要有:首页,个人中心,员工管理,部门管理,员工考勤管理,请假申请管理,加班申请管理,员工工资管理,招聘计划管理,员工培训管理,部......
  • Mysql5.6.10源码安装步骤
    Mysql5.6.10源码安装步骤//MySQL5.6.10源码安装步骤: 系统环境:CentOS5.6 MySQL版本:mysql-5.6.10.tar.gz 安装路径:/usr/local/mysql 数据目录:/data/mysql/data CentOS5.6下MySQL5.6源码安装 Linux操作系统:CentOS5.61:下载:当前mysql版本到了5.6.10 下载地址:ht......
  • flink源码分析--RPC通信过程分析
    flink的通信框架基于akka,但是不懂akka也关系不大。首先介绍几个概念,大家记住名字和对应的作用:xxxGateway:在flink中就是一个用来告诉调用者,xxx具有哪些方法可以调用的一个接口类。比如JobMasterGateway就是用来告诉所有需要调用JobMaster的用户,我JobMaster类只有比如10个方法,假设......
  • AQS源码详解
    AQS源码详解可重入锁:同一个线程可重复获取同一把锁对象locksupport:用来创建锁和其他同步类的基本线程阻塞原语park()和unpark()为什么会引出locksupport?像传统的synchorized和lock,他们的wait()和notify()方法,await()和singal()方法使用不方便,必须在同步代码块或者锁内使用,并......
  • Elasticjob 3.x 最新版本源码解读
    源码地址(含备注):https://gitee.com/ityml/elastic-job-zgc官方网站:https://shardingsphere.apache.org/elasticjob/ElasticJob是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管......
  • 直播平台搭建源码,调用系统相册实现多选图片上传
    直播平台搭建源码,调用系统相册实现多选图片上传1、首先需要给webview的WebChromeClient设置以下代码,才可以实现h5与Android交互选取图片 privateValueCallback<Uri>mValueCallbackUri;privateValueCallback<Uri[]>mValueCallbackUris;this.setWebChromeClient(newWebChro......
  • 统信UOS系统开发笔记(三):从Qt源码编译安装之编译安装Qt5.12.8
    前言  上一篇,是使用Qt提供的安装包安装的,有些场景需要使用到自己编译的Qt,所以本篇如何在统信UOS系统上编译Qt5.12.8源码。<br>统信UOS系统版本  系统版本:  Qt源码下载  参考博文《获取下载Qt安装包,Qt源码全国网址备忘录(不用注册Qt账户,即可下载各版本Qt安装包和Qt源......
  • xades4j 苦苦寻找的是啥 (源码 == 找到了测试用例 == 找到了用法)
    <dependency><groupId>com.googlecode.xades4j</groupId><artifactId>xades4j</artifactId><version>1.3.2</version></dependency>https://github.com/luisgoncalves/xades4j源码和junit(大量的测试用例,告诉我们什么是xades......
  • Storm-源码分析-Topology Submit-Client
    1StormClient最开始使用storm命令来启动topology,如下stormjarstorm-starter-0.0.1-SNAPSHOT-standalone.jarstorm.starter.WordCountTopology这个storm命令是用python实现的,看看其中的jar函数,很简单,调用exec_storm_class,其中jvmtype=”-client” 而exec_storm_clas......