C++ STL
文章平均质量分 78
毕业季的迷茫
IT小虾
展开
-
for_each用法
函数原型UnaryProc for_each (InputIterator beg, InputIterator end, UnaryProc op)*调用 op(elem), [begin, end)区间的每一个元素*返回遍历执行后的op副本*op可能修改元素, 与transform算法相似*op的返回值将被忽略*算法复杂度: 线性, 每个元素都调用一次op...原创 2021-06-05 10:35:28 · 1869 阅读 · 0 评论 -
15 Function Object
简单的理解,仿函数就是一个类,这个类定义了一个 operator() 函数,使用的时候调用的就是这个函数。特点:(1) 它可以具有函数状态(因为可以有成员变量,可以通过构造函数初始化)(2) 每个函数对象都可以有自己的类型(因为可以定义仿函数类模板)(3) 它的调用速度比普通函数更快(因为在编译阶段,编译器做了更多的优化,有更多的信息)例1:#include <list>#include <algorithm>#include <iostream>原创 2021-01-11 21:18:17 · 104 阅读 · 0 评论 -
14 Numeric Limits 数值极限
数字类型通常具有平台相关性, STL使用 template numeric_limits 提供这些极限值。整数常量定义于<climits>和<limits.h>, 浮点常量定义于<cfloat>和<float.h>.极值概念提供了更好的类型安全性. Type Minimum Size char 1 byte (8 bits) short int原创 2021-01-11 21:18:00 · 488 阅读 · 0 评论 -
13 Numerics
一、随机数#include <random>STL提供两个概念:引擎,分布1. 引擎STL提供16个随机数引擎, 可以来生成随机数或用来洗牌。默认引擎Class std::default_random_engine基础引擎Class std::linear_congruential_engineClass std::mersenne_twister_engineClass std::subtract_with_carry_engine引擎适配器Class st原创 2021-01-11 21:17:37 · 144 阅读 · 0 评论 -
12 Auxiliary Functions 辅助函数
1. 处理最大值和最小值 min(a,b) 返回最小值, 使用 < min(a,b,cmp) 返回最小值, cmp指定比较方法 min(initlist) 返回initlist中的最小值, 使用 < min(initlist,cmp) cmp指定比较方法 max(a,b) 返回最大值, 使用 >原创 2021-01-11 21:17:12 · 467 阅读 · 0 评论 -
11 std::string
string类型头文件#include <string>基础模板类template <typename charT, typename traits = char_traits<charT>, typename Allocator = allocator<charT> >class basic_string; 部分运算操作 描述 assign(),=原创 2021-01-11 21:16:43 · 404 阅读 · 0 评论 -
10 std::map mutilmap
map和mutilmap将key/value组成的pair当做元素进行管理, 可根据key的排序准则自动为元素排序。mutilmap允许重复元素, map不允许。使用map和mutilmap需要包含 #include <map>template <typename Key, typename T, typename Compare = less<Key>, typename Allocator = allocator<pair<const Key,T原创 2021-01-10 17:07:21 · 533 阅读 · 0 评论 -
09 std::set std::mutilset
set和mutilset会根据特定的排序准则,自动将元素排序。两者不同之处在于mutilset允许元素重复而set不允许。属于关联式容器。#include <set>只要是可以根据某种排序准则作比较的任意类型T都可以成为set或mutilset的元素。所谓的排序准则,意义如下:(1) 必须是非对称的对operator< 而言, 如果 x<y 为true, 则 y<x 为false对判断式 op()而言, 如果 op(x, y) 为true, 则 op(y, x) 为原创 2021-01-10 16:57:33 · 311 阅读 · 0 评论 -
08 pair,tuple
Pair简介Pair是包含两个value的单元, STL内多处用到它. 容器 map,multimap,unordered_map,unordered_multimap 使用Pair管理其内部元素. 还有一些需要返回两个值的函数也使用到Pair作为返回值, 例如minmax().Pair内部定义了 first_type和second_typetemplate <typename T1, typename T2>struct pair { // member T1 first;原创 2021-01-10 16:52:12 · 93 阅读 · 0 评论 -
07 Smart Pointers
STL提供了两大类smart pointer1. shared_ptr实现共享式拥有。多个smart pointer可以指向相同的对象, 该对象和其相关资源会在"最后一个reference"被销毁是释放。STL提供了 weak_ptr、bad_weak_ptr和enable_shared_from_this 等辅助类2. unique_ptr实现独占式拥有。保证同一时间内只有一个smart pointer可以指向该对象, 对于避免内存泄漏特别有用。shared_ptr目标: 在其所指向的对象原创 2021-01-10 16:42:34 · 110 阅读 · 0 评论 -
06 std::bitset
描述bitset 提供位操作, 可以方便数值与二进制转换1. 构造(1).bitset<bits>::bitset ()bits指定包含多少个位, 例如 bitset<50> flags; flag共有50位数, 初始化都是0(2)bitset<bits>::bitset (unsigned long long value)用value初始化bitset对象, bitset<50> flags(7); // flag: 00000.原创 2021-01-10 16:27:13 · 291 阅读 · 0 评论 -
05 std::deque
deque双向队列, 与vector相似, 采用动态数组管理元素, 提供随机访问, 有着与vector几乎一样的接口. 不同的是deque头尾都开放,能在头尾两端快速插入删除。#include <deque>1. deque与vector相比(1) 两端都能快速插入删除元素, 常量时间内完成; vector只能在尾部操作(2) 访问元素时, 内部结构会多一个间接过程, 元素的访问和迭代操作稍慢(3) 迭代器需在不同区块间跳转, 所以必须是一个smart pointer.原创 2021-01-10 16:19:51 · 240 阅读 · 0 评论 -
04 std::forward_list
forward_list 内部以单项链表方式管理元素, 使用要包含头文件#include <forward_list>forward_list是一个行为受限的list,不能走回头路。凡是list没提供的功能,它都不提供。优点是占用内存小,操作速度快。特性forward_list与list的差异(1) 只提供向前迭代器,不提供双向迭代器。这意味着,reverse_iterator之类的类型,rbegin,rend,crbegin,crend之类的成员都不能提供(2) 不.原创 2021-01-10 16:16:06 · 302 阅读 · 0 评论 -
03 std::list
list<>使用双向链表管理元素, 使用list需包含#include <list>list的内部结构完全迥异于array,vector,deque。list对象提供了两个指针, 用来指向第一个和最后一个元素, 而且每个元素又有指针指向前一个和后一个元素。下图是追加一个元素后, list内部结构的变化list与array,vector,deque主要有几点不同(1) list不支持随机访问。假设要访问第五个元素, 就要顺着链表爬过前4个元素,因此,随机..原创 2021-01-10 16:07:41 · 225 阅读 · 0 评论 -
02 std::vector
vector作为抽象动态数组,需要包含头文件 #include <vector>在末尾添加元素, 速度很快; 在开头或中间插入元素, 表现不佳。1. 成员操作 c.empty() 是否为空 c.size() 当前元素量 c.max_size() 最大可能量 c.capacity() 不重分配,可包含的最大元素量 c原创 2021-01-10 16:00:07 · 111 阅读 · 0 评论 -
01 std::array
class array<>封装了C风格数组,是一个常量大小的元素序列,不能添加、删除,只能替换。#include <array>1. 构造std::array<int,4> x; // OOPS: elements of x have undefined valuestd::array<int,4> x = {}; // OK: all elements of x have value 0 (int())std::array<int,5&g原创 2021-01-10 15:56:22 · 87 阅读 · 0 评论