stl
文章平均质量分 62
jingza
这个作者很懒,什么都没留下…
展开
-
十、STL函数对象---预定义的Function object 和Binder
2 预定义的Function object 和Binder位于头文件<functional>1 预定义的function object其中,bit_and,bit_or,bit_xor自c++11; 说明:对对象排序或比较,(用于排序函数和关联容器)时,默认用less<>为比较准则,无序容器默认相等性准则eequal_to<>2 Function Adapter 和Binder函数适原创 2017-09-01 14:42:14 · 603 阅读 · 0 评论 -
四.c++中的算法--排序及相关操作---合并排序
5.合并排序1.两个已序集合的总和merge() 函数模板: 版本一template<class InputIt1, class InputIt2, class OutputIt>OutputIt merge(InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last原创 2017-08-15 21:26:54 · 283 阅读 · 0 评论 -
四.c++中的算法--排序及相关操作---根据某个元素排序
3.根据某个元素排序nth_element该算法可对指定区间的元素进行排序,并且使第n个位置上的元素就位。即位置n之前的元素都小于 他。 使用函数后,序列元素就有序,小于第n个元素的元素在前面,大于他的元素在后面。1.nth_element函数原型为:template< class RandomIt >void nth_element( RandomIt first, RandomIt nt原创 2017-08-15 21:25:33 · 519 阅读 · 0 评论 -
四.c++中的算法--排序及相关操作---局部排序
2.局部排序partial_sort()partial_sort_copy()1.partial_sort()函数原型为;template< class RandomIt >void partial_sort( RandomIt first, RandomIt middle, RandomIt last );template< class RandomIt, class Compare >原创 2017-08-15 21:24:53 · 419 阅读 · 0 评论 -
四.c++中的算法--排序及相关操作---全部元素排序
1. 排序和相关操作1.全部元素排序sort()stable_sort()需要访问随机存储迭代器,因此只能适用于vector和deque容器,由于list容器不支持随机迭代器,所以不能使用这个算法std::sort(list),但是,可以使用list.sort()。1.sort():函数声明:template< class RandomIt >void sort( RandomIt firs原创 2017-08-15 21:23:44 · 228 阅读 · 0 评论 -
九、 通用工具 ----数值的极限(Numeric Limit)
3 数值的极限(Numeric Limit)数值类型一般有与平台相互依靠的极值;c++使用template numeric_limits提供,定义于头文件 c语言采用的是预处理常量:整数定义在<climits>和<limits.h>,浮点数定义在<cfloat>和<float.h>c++定义的各类型的最小精度: 1 class numeric_limits<>1.1 numeric_lim转载 2017-08-25 16:51:31 · 1034 阅读 · 0 评论 -
九、 通用工具 ----smart Pointer(智能指针)---unique_ptr
3 class unique_ptrc++11提供,继承class auto_ptr 1. 独占式拥有 2. unique_ptr被销毁,指向的对象也被销毁;3.1. unique_ptr的构造函数//default (1) constexpr unique_ptr() noexcept;//from null pointer (2) constexpr unique_ptr (null原创 2017-08-25 16:25:09 · 354 阅读 · 0 评论 -
九、 通用工具 ----smart Pointer(智能指针)---weak_ptr
2 class weak_ptrshared_ptr的限制: 1. 环式指向: 两个shared_ptr的对象互相指向对方,如果想要释放它们,shared_ptr不会释放数据,因为它们的unse_count()为1; 2. “明确想共享,但是不愿拥有”:标准库定义了class weak_ptr,允许“共享但是不拥有”某对象;一旦拥有该对象的最后一个shared_ptr失去拥有权之后,weak_p原创 2017-08-25 16:24:08 · 325 阅读 · 0 评论 -
九、 通用工具 ----smart Pointer(智能指针)---shared_ptr 指针
2 smart Pointer(智能指针)c++11提供两大类型的只能指针:class shared_ptr :共享式拥有class unique_ptr: 独占式拥有所有的智能指针被定义在头文件<memory>;智能指针只能用来管理动态内存,即new分配的动态内存;1 shared_ptr 指针在其所指向的对象不再被需要之后,自动释放与对象相关的资源;shared_ptr有一个关联的计原创 2017-08-25 16:23:24 · 403 阅读 · 0 评论 -
七、输入/输出流---随机访问
7 随机存取各种流类型通常支持对流中的数据的随机访问;标准库提供一对函数,来定位(seek)到流中给定的位置,以及告诉(tell)我们当前的位置;虽然标准库为所有的流定义了seek和tell函数,是否有意义依赖于绑定到那个设备。绑定到cin,cout,cerr和clog的流不支持随机访问;对于istream和ostream类型通常不支持随机访问,所以一般只适用于fstream和sstrea原创 2017-08-22 15:35:06 · 330 阅读 · 0 评论 -
七、输入/输出流--基于字符串的流---basic_stringstream模板
4 basic_stringstream模板basic_stringstream支持读写basic_string对象; 定义;template < class charT, // basic_stringstream::char_type class traits = char_traits<charT>, // b原创 2017-08-22 15:34:01 · 780 阅读 · 0 评论 -
七、输入/输出流--基于字符串的流---basic_ostringstream模板
3 basic_ostringstream模板basic_ostringstream模板支持写入basic_string对象,使用basic_stringbuf控制相关存储区域; 定义:template < class charT, // basic_ostringstream::char_type class traits原创 2017-08-22 15:33:35 · 1227 阅读 · 0 评论 -
七、输入/输出流-- 七、输入/输出流--基于字符串的流---basic_istringstream 模板
2 basic_istringstream 模板basic_istringstream模板支持读取basic_string 模板类的对象;使用basic_stringbuf类对象控制相关存储区域;定义:template < class charT, // basic_istringstream::char_type class原创 2017-08-22 15:33:01 · 595 阅读 · 0 评论 -
七、输入/输出流--基于字符串的流---streambuf类
基于字符串的流在头文件<sstream>中,定义了4个类模板和6个类型,,都是和basic_string相关的流缓冲区类型;其功能是将流附着在string上,即通过流提过的格式化功能,从string中读取或者写入到string中,这样的流被称为stringstream.template< class CharT, class Traits = std::char_traits<C原创 2017-08-22 15:31:54 · 630 阅读 · 0 评论 -
四.c++中的算法--删除算法
删除算法删除算法指的是删除容器中满足相应条件的元素。 1. 被删除元素会按顺序向前移动 2. 不能应用于关联式容器 3. 关联式容器的删除需要使用算法erase() 4. list容器,可以使用自身成员函数remove()1.remove()直接删除容器的元素 函数原型为:template<class ForwardIt, class T>ForwardIt remove(Forward原创 2017-08-15 21:28:05 · 1038 阅读 · 0 评论 -
四.c++中的算法--排序及相关操作---搜索
6.搜索1.binary_search()在已序区间搜寻指定的元素,【搜索区间必须是有序的】 函数原型为:template<class ForwardIt, class T>bool binary_search(ForwardIt first, ForwardIt last, const T& value){ first = std::lower_bound(first, last,原创 2017-08-15 21:27:31 · 234 阅读 · 0 评论 -
# 十、STL函数对象---函数对象的概念
标签(空格分隔): c++STLFunction object的概念就是一个定义了operator()的对象;class FunctionOjbectType{public: void operator()(){ //statements }};FunctionObjectType fo;fo(); //调用的fo对象的operator()优点:functi原创 2017-09-01 14:41:16 · 437 阅读 · 0 评论 -
343. Integer Break
Given a positive integer n, break it into the sum of at least two positive integers and maximize the product of those integers. Return the maximum product you can get. For example, given n = 2, return原创 2017-09-01 09:37:49 · 311 阅读 · 0 评论 -
九、 通用工具 ----动态内存管理---new
2 new<new>中定义了几种函数,这些函数负责动态内存的分配;2.1 类型nothrow_t: nothrow 类型new_handler: new 处理函数的函数指针类型 bad_alloc : 分配内存失败抛出的异常bad_array_new_length :数组长度不正确的异常常量:nothrow : nothrow常量2.2 函数operator new : 分配存储空间原创 2017-08-31 19:41:02 · 390 阅读 · 0 评论 -
九、 通用工具 ----动态内存管理--allocator
1 动态内存管理头文件<memory>提供了内存管理;1 默认配置器一些和内存管理相关的模板类和函数, - allocator : 模板类 - raw_storage_iterator: 内存管理的迭代器 - get_temporary_buffer(): 返回临时缓冲区的指针; - return_temporary_buffer():释放掉临时缓冲区; - uninitialized_原创 2017-08-31 19:40:41 · 379 阅读 · 0 评论 -
九、 通用工具 ----头文件cstddef,cstdlib和,cstring
1 cstddef内的各项定义 说明:c++使用nullptr替代NULL;2cstdlib 说明:atexit()函数注册的函数,在程序退出时候按照注册的顺序相反被调用;exit()和abort()终止程序,不会返回main();exit()会销毁所有的static对象,然后清空缓冲区,关闭i/o,然后终止程序,终止前先调用atexit()注册的函数,如果atexit()注册的函数抛原创 2017-08-31 16:04:08 · 830 阅读 · 0 评论 -
九、 通用工具 ----clock和Timer
7 clock和Timerc++11提供一个精度中立的程序库(chrono程序库),定义与<chrono>c++标准库也提供基本的c和posix接口,处理日历时间;1 chrono程序库简介目的:希望处理“timer和clock在不同的系统中可能不同”的事实;强化时间精度提供精度中立的概念,将duration(时间段)和timepoint(时间点)从特定的clock区分开来;chron原创 2017-08-31 16:03:34 · 2047 阅读 · 0 评论 -
九、 通用工具 ----class ratio<>
c++11提供了一个借口允许具体制定编译期分数(compile-time fraction),并且允许对他们执行编译期运算;6.1 ratio定义ratio utility是由<ratio>提供,定义:template <intmax_t N, intmax_t D = 1> class ratio;class ratio{public : typedef ratio<num,den原创 2017-08-31 16:02:46 · 438 阅读 · 0 评论 -
九、 通用工具 ----辅助函数
5 辅助函数c++标准库提供了若干小型辅助函数,用来挑选最小值,挑选最大值,交换两个值或者提供增补的比较操作符;1 挑选最小值和最大值一般位于<algorithm>头文件中: 其中:minmax()和所有带初始化队列(initializer list)的函数位于:【c++11】说明:minmax() 返回一个pair<>,其中first是最小值,second是最大值;关于双参数版本,如原创 2017-08-31 16:02:08 · 754 阅读 · 0 评论 -
九、 通用工具 ----Type Trait 和 Type Utility
4 Type Trait 和 Type Utility1 Type Traittype trait: 提供一种处理type属性的办法;它是一个template,可在编译期间根据一个或多个模板实参产生一个type或value;定义与头文件<type_traits>中;1.1 (单参)类型判断式(TYPE predicate)所有的类型判断工具: (1) 用来检验类型性质的Trait (2)原创 2017-08-31 16:01:27 · 591 阅读 · 0 评论 -
四、c++中的算法--变动性算法---互换
3.互换swap(): 用于两个不同容器对象之间的元素交换。函数声明为:template< class T >void swap( T& a, T& b );//第二种形式: [c++11]template< class T2, std::size_t N >void swap( T2 (&a)[N], T2 (&b)[N]);//swap_rangestemplate< class F原创 2017-08-15 21:34:08 · 380 阅读 · 0 评论 -
四、c++中的算法--变动性算法---转换
2.转换transform(): 实现将源区间的元素复制到目标区间,复制和修改元素一次完成,还可以将两个区间的元素合并,并将结果写入到目标区间。函数声明:template< class InputIt, class OutputIt, class UnaryOperation >OutputIt transform( InputIt first1, InputIt last1, OutputI原创 2017-08-15 21:33:35 · 257 阅读 · 0 评论 -
c++中的算法--变动性算法---复制
c++中的算法–变动性算法标签(空格分隔): c++STL变动性算法:能够做所作用的容器进行修改的算法 改变容器的值得方法: 1. 使用迭代器遍历序列的过程中,直接改变元素的值; 2. 在元素复制过程中,改变元素的值。变动性算法主要包括: 1. 复制 2. 转换 3. 互换 4. 赋值 5. 替换 6. 逆转 7. 旋转 8. 排列 【注】:上述算法的目标容器或目标区间不能是原创 2017-08-15 16:57:04 · 308 阅读 · 0 评论 -
四.c++中的算法--排序及相关操作---堆操作
4.堆操作“堆”是一种组织序列元素的方式。堆的内部数据结构是二叉树。 两大性质: 1. 堆的第一个元素通常是最大的元素 2. 能够在对数时间内增加或移除一个元素; 堆的操作算法: - push_heap() - pop_heap() - sort_heap() - make_heap() - 等等1.make_heap()函数模型:template< class RandomIt原创 2017-08-15 21:26:11 · 235 阅读 · 0 评论 -
七、输入/输出流--基于文件的流
6 基于文件的流头文件 <fstream> c++标准库提供了4个模板类,预定义了4个标准特化版的版本; 1. template class basic_ifstream<>和其特化版ifstream和wifstream,用于读取文件; 2. template class basic_ofstream<>和其特化版iofstream和wofstream,用于将数据写入文件文件; 3. tem原创 2017-08-22 15:29:37 · 380 阅读 · 0 评论 -
12. Integer to Roman
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.给定一个整数,将它转换成一个罗马数字。 输入是保证在范围从1到3999。罗马数字转换成整数: 首先要来了解一下罗马数字表示法,基本字符有7个:I,V,X,L,C,D,M,分别表示1,转载 2017-08-24 20:52:02 · 308 阅读 · 0 评论 -
六、STL的数值计算---数组(向量)运算---indirect_array类
6.indirect_array类间接数组子集也是创建数组子集的一种方式,还可以任意排列元素。 这是第四种方法。 1. indirect_array是将valarray<size_t>用作valarray数组下标产生的子集。 2. 下标要小于valarray元素的个数例子://-----------------省略----------------valarray<int> val_1 = {原创 2017-08-17 16:13:45 · 459 阅读 · 0 评论 -
六、STL的数值计算---数组(向量)运算---mask_array类
4.类mask_arrayvalarray类提供了一种描述子集的方式: 屏蔽子集。valarray类经过“屏蔽”处理后,返回结果为valarray<bool>型将“屏蔽”作为下标,值为true的位表明了对应的valarray数组中的元素将作为结果的一部分。和slice_array一样,mask_array不能有程序开发者构造和复制。屏蔽的valarray的元素的个数不能多于valarray原创 2017-08-17 16:13:13 · 638 阅读 · 0 评论 -
六、STL的数值计算---数组(向量)运算---gslice类和gslice_array类模板
3.类gslice和类模板gslice_arraygslice: 是general slice的简称。。3个属性:和slice类似,起始索引,元素数量,元素间距。但是他的元素数量和元素间距也是数组。元素个数与维度相同。gslice可以处理一维数组,二维数组,和三维数组gslice_array 为gslice切割的子集的类型gslice类 构造函数:gslice();gslice( std原创 2017-08-17 16:12:49 · 649 阅读 · 0 评论 -
六、STL的数值计算---数组(向量)运算---数组子集类-slice类和slice_array类模板
2.数组子集类—slice类和类模板slice_arrayslice是切割的意思,即将一个向量作为任意维度的数组来处理。“切割”操作是在一个valarray中,中间距离为n的多个元素。slice的跨步是切割两个元素的距离(间隔的下标个数)1.slice类std::slice 是选择器类,一个 std::slice 类型的对象保有三个值:起始下标,跨度,及子集中的值的总数。std::sli原创 2017-08-17 16:11:39 · 813 阅读 · 0 评论 -
六、STL的数值计算---向量(数组)运算--valarray类
数组运算(向量)头文件: <valarray> stl提供了一个数组类: class valarray 1. valarray 实现数值数组的运算 2. valarray代表: 数值线性队列,该序列是一维的1.类valarrayvalarray是经过优化的向量(vector),有四个辅助类型slice_arraygslice_arraymask_arrayindirect_array原创 2017-08-17 16:10:21 · 581 阅读 · 0 评论 -
六、STL的数值计算---复数运算
stl 的数值运算:复数运算数组运算通用数值运算全局性数学函数1.复数运算复数是由实部和虚部组成的数值。虚部的特点是: 其平方值为负数,即复数虚部的带着i,i是-1的平方根类complex定义与<complex>中, 类定义:template< class T >class complex;stl还提供了,float,double,long double的特殊版本。1.复数的成员原创 2017-08-17 16:08:43 · 1415 阅读 · 0 评论 -
五、迭代器--迭代器辅助函数
5. 迭代器辅助函数stl有三个辅助函数: - advance() - distance() - iter_swap()前两个给所有迭代器提供前进和后退的能力第三个允许程序交换两个迭代器的数值;1. advance()迭代器前进函数函数原型为:template< class InputIt, class Distance >void advance( InputIt& it, Dist原创 2017-08-16 15:51:41 · 510 阅读 · 0 评论 -
五、迭代器--迭代器配接器
4.迭代器配接器c++标准库提供了很多预定义的特殊迭代器,即所谓的迭代器配接器(iterator adapters). 迭代器配接器使算法能够以逆向,安插模式进行工作,还可以和流配合。1.逆向迭代器Reverse是一种配接器。他能定义递增运算符和递减运算。使其行为倒置。算法一逆序来处理元素,所有的容器都允许使用reverse迭代器来遍历元素。reverse_iterator与iterator都继承原创 2017-08-16 15:51:10 · 253 阅读 · 0 评论 -
四、c++中的算法--变动性算法---排列
8.排列介绍三种操作 - 排列元素:排序方式为字典式“正规”排序 - 重排元素,对容器内元素随机排序。形式一:符合均匀分布随机的排序。形式二:按指定规则打乱容器的元素次序。 - 将元素向前搬移,按指定的一元判断式向前搬移元素,函数返回值是使一元判断式为“false”的第一个元素的位置。1.排列元素next_permutation 函数模板:templatecl原创 2017-08-16 15:49:25 · 200 阅读 · 0 评论