stl

c++基础:8.2.4 _STL容器-map

孤者浪人 提交于 2020-03-04 06:40:50
文章目录 1\. 简介 (***)2\. 操作 (***)2.1 初始化 (***)2.2 修改&添加&删除&遍历常见的用法 (***)2.3 面试常考 2.3.1 (面试题56)数字和出现的次数 2.3.2 (面试题56-2)数字出现的次数 3.标准 3.1 添加数据 3.2 遍历 3.3`key`查找 3.4 区域查找 3.5 删除 3.6 排序 4\. 实例 1. 简介 map 是 key-value 构成的集合。 (***)2. 操作 map 是键值对 <key,value> 构据集合。 key 必须唯一。 主要用来查找 key 对应 value ,要求 key 必须是可排序的,必须支持 < 比较运算符。 map 默认是以 key 升序存放键值对 <key,value> 数据,比较适合二分查找。 map 内部结构 map 使用 pair<key,value> 类模板保存key与value, pair<key,value> 有两个 public 成员变量: first 和 second , first 存放key, second 存放value。在 map 里面可以使用 map<>::value_type 表示 pair<key,value> 。 typedef pair < key , value > value_type ; (***)2.1 初始化 默认构造(可带参数)

C++序列式容器(STL序列式容器)介绍

◇◆丶佛笑我妖孽 提交于 2020-03-03 08:36:23
所谓序列容器,即以线性排列(类似普通数组的存储方式)来存储某一指定类型(例如 int、double 等)的数据,需要特殊说明的是,该类容器并不会自动对存储的元素按照值的大小进行排序。 1.array<T,N> (数组容器) :是一个长度固定的序列,有 N 个 T 类型的对象,不能增加或删除元素。 2.vector (向量容器) :是一个长度可变的序列,用来存放T类型的对象。是一个长度可变的序列容器,即在存储空间不足时,会自动申请更多的内存。使用此容器,在尾部增加或删除元素的效率最高(时间复杂度为 O(1) 常数阶),在其它位置插入或删除元素效率较差(时间复杂度为 O(n) 线性阶,其中 n 为容器中元素的个数); 3.deque (双向队列容器) :和 vector 非常相似,区别在于使用该容器不仅尾部插入和删除元素高效,在头部插入或删除元素也同样高效,时间复杂度都是 O(1) 常数阶,但是在容器中某一位置处插入或删除元素,时间复杂度为 O(n) 线性阶; 4.list (链表容器) 是一个长度可变的、由 T 类型对象组成的序列,它以双向链表的形式组织元素,在这个序列的任何地方都可以高效地增加或删除元素。访问容器中任意元素的速度要比前三种容器慢,这是因为 list 必须从第一个元素或最后一个元素开始访问,需要沿着链表移动,直到到达想要的元素。 5.forward list

C++ STL源码分析——仿函数

老子叫甜甜 提交于 2020-03-03 05:02:31
【侯捷-SL体系结构内核分析-仿函数】 STL提供的标准仿函数可以分为三类:算数类、逻辑运算类和相对关系类。 算术类,比如 plus, minus等 逻辑运算类,比如 logical_and 相对关系类,比如equal_to, less STL规定,当自己写仿函数来配合 algorithm 操作时,为达到仿函数的 可适配(adaptable)的条件,仿函数必须继承 unary_function 或者是 binary_function。 什么叫仿函数的可适配呢? 因为在仿函数的适配器 adapter 中(STL六大部件之一),它会询问仿函数一些问题,而仿函数就要有能力回答出这些问题。(类似于algorithm 会问 iterator 相应的问题,iterator 就应该回答出来)。通常以下面这种形式: typename Operation :: second_argument_type value 就是在询问仿函数,“你的 second_argument_type 是什么呀?”,相应的仿函数就必须能够回答出来。 unary_function 和 binary_function 的源代码如下: template < class _Arg , class _Result > struct unary_function { // base class for unary functions

STL容器通用操作及涉及类型

二次信任 提交于 2020-03-03 03:52:16
类型 操作 解释 iterator 此容器类型的迭代器类型 const_iterator 可以读取元素但不能修改元素的迭代器类型 size_type 无符号整数类型,足够保存此种容器类型最大可能的大小 difference_type 带符号整数类型,足够保存两个迭代器之间的距离 value_type 元素类型 reference 元素的左值类型;和 value_type & 含义相同 const_reference 元素的 const 左值类型,即 const value_type & 构造函数 操作 解释 C c; 默认构造函数,构造空容器 C c1(c2); 或 C c1=c2; 构造 c2 的拷贝 c1 C c(b, e) 构造 c ,将迭代器 b 和 e 指定范围内的所有元素拷贝到 c C c(a, b, c...) 列表初始化 c C c(n) 只支持顺序容器,且不包括 array ,包含 n 个元素,这些元素进行了值初始化 C c(n, t) 包含 n 个初始值为 t 的元素 · 和其他容器不同,默认构造的 array 是非空的 · 直接复制:将一个容器复制给另一个容器时,类型必须匹配:容器类型和元素类型都必须相同 · 使用迭代器复制:不要求容器类型相同,容器内的元素类型也可以不同 · 只有顺序容器的构造函数才接受大小参数,关联容器并不支持 来源: https:/

STL简介_18

隐身守侯 提交于 2020-03-03 00:25:18
一。什么是STL?   -STL,即:Standard Template Library,是C++的一部分   -STL是常用数据结构和算法的集合   -STL的目标是标准化组件,提高开发效率和程序可靠性 二。STL主要由以下3个部分组成   -容器:管理数据的集合   -算法:处理集合内的元素   -迭代器:遍历集合内的元素   1.STL:里面的容器     容器里存放的都是值而不是引用     容器内部实施的是值拷贝操作。     容器中可以存放指针作为数据元素   2.线性表的典型操作      size:获取当前容器中的元素数目     insert:在当前元素前插入新元素     erase:删除当前元素     empty:判断当前容器是否为空     front:获取第一个元素     back:获取最后一个元素   3.vector的使用 #include <cstdlib> #include <iostream> #include <vector> using namespace std; int main(int argc, char *argv[]) { vector<int> vi(10); cout << "vi.size:" <<vi.size() <<endl; for(int i=0;i<5;i++) { vi[i] = i + 1; } vi

looking for a MemoryStream in C++

北慕城南 提交于 2020-03-01 23:13:58
问题 In the wonderful world of C# i can create a memory stream without specifying its size, write into it and then just take the underlying buffer. How can i do the same in c++? basicly i need to do: memory_stream ms(GROW_AS_MUCH_AS_YOU_LIKE); ms << someLargeObjects << someSmallObjects << someObjectsWhosSizeIDontKnow; unsigned char* buffer = ms.GetBuffer(); int bufferSize = ms.GetBufferSize(); rawNetworkSocket.Send(buffer, bufferSize); By the way I have boost in my project though I'm not all that

C++基础:(STL)8.1:STL简介

℡╲_俬逩灬. 提交于 2020-03-01 17:31:58
文章目录 0\. 背景 1.STL是什么? 2.STL与C++标准库的关系 3.版本 (***)1\. STL 的组成 2\. 容器分类 3. 迭代器 4\. 适配器分类 5\. 算法分类 6\. 函数对象分类 7\. 分配器 0. 背景 1.STL是什么? STL(Standard Template Library)标准模板库的英文缩写,包含有计算机科学领域常用的基本数据结构和基本算法。 2.STL与C++标准库的关系 3.版本 No. 版本 作者 是否开源 特点 1 HP STL [美]Alexandar Stepanov/[美]Meng Lee 是 第一个实现版本 2 SGI STL [美]Alexandar Stepanov 是 GCC使用版本,源码可读性高 3 STLport [俄]Boris Fomitchev 是 适用于VC++和C++ Builder等多种编译器,跨平台可移植 4 P.J.Plauger STL [美]P.J.Plauger 否 Visual C++使用版本,性能教高 5 Rouge Wave STL Rouge Wave公司 否 Borland C++ 5.0-使用版本 参考:《STL源码剖析》侯捷 (***)1. STL 的组成 STL Components No. Component 部件 作用 1 Container 容器 存储数据 2

STL里的哪些容器里有find函数

情到浓时终转凉″ 提交于 2020-03-01 08:28:25
find函数只在关联式容器和string类中存在, 关联式容器返回的是元素存在的迭代器, 而string返回的是第一个字符在目标串中匹配的位置 如“213 ”和“12134” The position of the first character of the first match. If no matches were found, the function returns string::npos . 来源: CSDN 作者: 想飞的IT猪 链接: https://blog.csdn.net/woainilixuhao/article/details/104572884

优先队列STL

蓝咒 提交于 2020-03-01 03:06:57
Training 2 - C题 You are given an array of n integer numbers a0, a1, …, an - 1. Find the distance between two closest (nearest) minimums in it. It is guaranteed that in the array a minimum occurs at least two times. Input The first line contains positive integer n (2 ≤ n ≤ 105) — size of the given array. The second line contains n integers a0, a1, …, an - 1 (1 ≤ ai ≤ 109) — elements of the array. It is guaranteed that in the array a minimum occurs at least two times. Output Print the only number — distance between two nearest minimums in the array. Examples Input 2 3 3 Output 1 Input 3 5 6 5

正确使用stl map的erase方法

自古美人都是妖i 提交于 2020-02-29 13:22:26
先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.erase有3个重载: void erase ( iterator position ); size_type erase ( const key_type& x ); void erase ( iterator first, iterator last ); 所以下面的代码中的最后一个例子仅仅可以在windows下的map下运行。 STL的map表里有一个erase方法用来从一个map中删除掉指令的节点 eg1: map<string,string> mapTest; typedef map<string,string>::iterator ITER; ITER iter=mapTest.find(key); mapTest.erase(iter); 像上面这样只是删除单个节点,map的形为不会出现任务问题, 但是当在一个循环里用的时候,往往会被误用,那是因为使用者没有正确理解iterator的概念. 像下面这样的一个例子就是错误的写法, eg2: for(ITER iter=mapTest.begin();iter!=mapTest.end();++iter) { cout<<iter-