num 数组中待排序元素数量。 size 各元素的占用空间大小。 compar 指向函数的指针,根据返回值确定排序的顺序 。...+ 标准模板库(STL)中的函数模板,定义于头文件,所在名字空间为 std。...qsort 是 C 的库函数,sort 是 C++ STL 中的函数模板。 sort 更易于使用。 qsort 必须要指定比较函数,而 sort 可以指定,也可以缺省。 sort 速度更快。...而 qsort() 通过函数指针进行间接调用比较元素大小,导致编译器无法优化。 sort 灵活性更高。...sort 适用于所有数据类型和不同的数据容器,例如 C 数组、C++ 向量、C++ 双端队列等以及用户可以编写的其他容器。 这种灵活性在 C 语言中很难实现。 sort 安全性更高。
8 数组 8.1一维数组 8.2二维数组 8.3 指向数组的指针 8.4 数组与new(动态创建数组) 8.5 数组与函数 数组->函数 函数返回数组 8.6 获取数组的大小 9 函数 9.1 函数声明与定义...p+n运算得到的地址是p+n*sizeof(数据类型)。 两个相同数据类型的指针可以进行加减运算,一般用于数组的操作中。 关系运算:指针指向同一串连续存储单元才有意义,比如数组。...指针访问二维数组:指向二维数组元素,指向一维数组 数组指针:数据类型 (*指针变量名) [m] int arr[10]; int *p1 = arr;// *p1 = &arr[0]; int a[3...: *不是算子的一部分,星号表示在没有使用任何算子的情况下,就等效于使用了该算子,例如,在默认情况下,整数是用十进制形式输出的,等效于使用了 dec 算子 流操纵算子 作 用 *dec 以十进制形式输出整数...C++更趋向于使用迭代器而不是下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只用少数容器(如vector)支持下标操作访问容器元素。按照定义方式分为以下四种。
仿函数(Functors):仿函数是一种类对象,它重载了函数调用操作符(),使得可以像函数一样调用这个类对象。STL中的很多算法都可以接受仿函数作为参数,以实现更加灵活的功能。...,再添加了一些专门用来操作string的常规操作 实际上,std::string 是 C++ 标准库中的一部分,而 STL(标准模板库)是 C++ 标准库的子集,但是由于它和其他 STL 容器(如...(最推荐使用) 在 C++ 标准库中,std::string 类提供了迭代器,用于遍历字符串中的字符。...反向迭代器允许从容器的末尾向前遍历容器中的元素。 rend 函数返回一个反向迭代器,指向容器中第一个元素之前的位置。通常用于标记反向遍历的结束位置。...npos 的类型是 size_t,它是一个无符号整数类型 8.String operations函数(find,rfind,substr) 8.1find find 用于返回 一个字符或一个字符数组或一个
,当然,并不是所有迭代器的底层都是用指针实现的: typedef char* iterator; //简单理解string中的迭代器 -函数名称 -函数功能 begin() 返回一个指向字符串中第一个字符的迭代器...swap swap 函用于交换两个字符串的内容,包括指向的字符数组、有效数据个数以及容量大小: 9、String Operations string 提供了系列对 string 进行操作的函数:...c_str 在某些场景中只支持对C形式的字符串,即字符数组进行操作,比如网络传输、fopen,而不支持对C++中的 string 对象进行操作,所以 string 提供了c_str,用于返回C形式的字符串...,而 rfind 函数是默认从倒数第二个位置从后往前找: find_first_of find_first_of 函数用于返回在 string 找寻找与 字符/字符数组/string 中任意一个字符匹配的元素的位置...: getline C++ 中的 cin 和 C语言中的 scanf 函数都是以空格、换行、Tab 作为不同数据之间的分割标志的,即当它们遇到这些符号时就会停止读取: C语言提供了 gets 函数来读取一行字符
数组作为数据的集合,是解决许多问题的基石。字符串处理是很多竞赛题目的重要一环。栈和队列则常用于解决需要维护顺序的问题。 在第四部分,我们将关注常用算法,如排序算法和查找算法。...此外,我们还将强调编写清晰易读的代码的重要性,以便在竞赛中更快地理解和调试代码。 2.1 变量和数据类型 在C++中,变量用于存储数据,并且在使用之前需要声明和定义。...以下是一些常见的C++数据类型: 整数类型: int、long、short 等,用于存储整数值。 浮点数类型: float、double,用于存储带小数点的数值。...3.1 数组 数组是存储相同类型数据的集合,能够通过索引访问其中的元素。在信息学竞赛中,数组常常用于存储序列数据,如整数序列、字符序列等。 创建数组: 使用[]操作符声明数组,并指定数组的大小。...引用通常用于函数参数传递和避免拷贝大对象。
您可以选择更具吸引力的选项,即在函数声明中使用double作为返回类型而不是result_of ! 8 预处理 SWIG 包括其自己的 C 预处理器的增强版本。...没有任何类型的边界检查或安全性。如果你想要这个,你应该考虑使用一个特殊的数组对象而不是一个裸指针。...这些类型映射覆盖默认类型映射,以便存储底层代理类并将其作为指向 shared_ptr 的指针传递而不是指向基础类型的普通指针。...%shared_ptr 宏引入的唯一真正变化是代理类存储了一个指向 shared_ptr 实例的指针,而不是一个指向该实例的原始指针。...因此,您不能像本示例中的底层 C 函数那样就地修改对象的值。因此, INOUT 规则将修改后的值作为新对象返回,而不是直接覆盖原始输入对象的值。
很明显,size_t不可能取负值,因此这个变量常表示用于一些特殊的表示: 表示string这个类型的最大容量(大约4亿多字节),是max_size()的返回值。...专门用于访问STL中各个数据结构中的元素。..."hello"; string s2 = "world"; s1.swap(s2); 实现方法,交换两个string的指针 STL的全局函数std::swap STL库中存在一个全局函数swap,在命名空间...in; } 此处从缓冲区获取字符的时候,使用的是in.get()而不是in>>,因为字符的流提取符>>将空格和换行认定为终结符,因此如果从通过in>>读取到缓冲区中读取到终结符,就终止读取了,ch获取不到这个终结符...而in.get()是获取缓冲区中的(任何)一个字符,无论是不是终结符。这样就能确保ch拿到缓冲区里面的每一个字符,然后再判断时候终止循环。
但是,为什么最终还是C++幸运的承担了这个历史性任务呢?原因不仅在 于前述那个条件,还在于C++在某些方面所表现出来的优越特性,比如:高效而灵活的指针。...而作为在实现STL过程中扮演关键角色的模板则充斥 了几乎整个C++标准函数库。在这里,我们有必要看一看C++标准函数库里包含了哪些内容,其中又有哪些是属于标准模板库(即STL)的。...这一思想和面向对象的程序设计思想(OOP)不尽相同,因为,在OOP中更注重的是对数据的抽象,即所谓抽象数 据类型(Abstract Data Type),而算法则通常被附属于数据类型之中。...几乎所有的事情都可以被看作类或者对象(即类的实例),通常,我们所看到的算法被作为成员函数 (member function)包含在类(class)中,类和类则构成了错综复杂的继承体系。...只是,那个compare函数,看起来有点费劲。指向它的函数指针被作为最后一个实参传入qsort函数,qsort是C 程序库stdlib.h中的一个函数。
它也允许从一个指针转换为整数类型。反之亦然。这个操作符能够在非相关的类型之间转换。操作结果只是简单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何类型的检查和转换。...但是既然STL里面内定如此了,所以作为程序员你必须要遵循这个规则,否则就别想安全的使用STL。 比如我们自己定一个仿函数。...hash table不是C++标准程序库的一员。 3、迭代器使用过程中优先选用前置式递增操作符(++iter)而不是选择后置式递增操作符(iter++)。...在string中,字符‘/0’和其他字符的地位完全相同。string中有三个函数可以将字符串内容转换成字符数组或C形式的string。 data() 以字符数组的形式返回字符串内容。...copy() 将字符串内容复制到“调用者提供的字符数组”中,不添加’/0’字符。
上期我们一起学习了OpenCV中常用的数据类型, 机器视觉算法(第6期)----OpenCV中的基础数据类型 今天我们主要认识一下OpenCV中很重要的几个辅助对象。 1....Range类 Range类用于确定一个连续的整数序列,Range对象有两个元素start和end,跟上面的TermCriteria相似,通常在构造函数中设置。...而作为程序员的我们,不必去记录这些东西。 接下来,我们了解下它的工作原理。首先,我们需要对想要封装的类对象定义一个指针模板的实例。...一旦我们得到p,就可以创建其他相同类型的对象了,而不需要把一个指向新对象的指针传递给他们。...err,func和file都是STL字符串。 有几个内置的宏,用于自己生成异常。
通常字符串字面值较小,性能损耗可以忽略不计;但字符串指针和字符数组某些情况下可能会比较大(比如读取文件的内容),此时会引起频繁的内存分配和数据拷贝,会严重影响程序的性能。...实际上我们本意并不是要改变原字符串,为什么不在原字符串基础上返回呢? 在C++17中引入了string_view,能很好的解决以上两个问题。...好在这块内存空间有合法的字符串结尾符,如果str指向的是一个没有\0的字符数组,程序很有可能会出现内存问题,所以我们在将string_view类型的数据传入接收字符串的函数时要非常小心。...C++标准并没有对这个类型做太多的约束,这引来的问题是我们可以像平常的变量一样以多种方式使用它,如,可以传参,可以作为函数返回值,可以做普遍变量,甚至我们可以放到容器里。...随着使用场景的复杂,人工是很难保证指向的内容的生命周期足够长。所以,推荐的使用方式:仅仅作为函数参数,因为如果该参数仅仅在函数体内使用而不传递出去,这样使用是安全的。
C++ 标准库,提供了大量的函数,用于操作文件、字符串等。 标准模板库(STL),提供了大量的方法,用于操作数据结构等。 C++的标准 对一门编程语言来说,遵循统一的标准是必需的。...不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。 C++ 中使用指针 使用指针时会频繁进行以下几个操作:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。...把引用作为返回值 可以从 C++ 函数中返回引用,就像返回其他数据类型一样。...,而不是它的类型。...在 C++ 中,我们使用类来定义我们自己的抽象数据类型(ADT)。
随机数法通常应用于关键字长度不等的情况。...,指向单链表的第一个元素,所以 _tables 是一个指针数组;最后,为了是不同类型的 key 都能够计算出映射的下标位置,所以我们这里也需要传递仿函数;如下; //开散列 namespace BucketHash...m的素数p作为除数,按照 哈希函数 Hash(key) = key % p (p<=m), 将关键码转换成哈希地址; 那么这里为什么要选择素数 (质数) 作为除数而不是单纯使用哈希表的大小作为除数呢?...因此,哈希表的除数通常是严格的素数或者质数,比如 C++ STL 中的 unordered_map 和 unordered_set,其底层哈希表都是使用素数作为除数; 但并不是所有的哈希表实现都使用严格的素数或者质数作为除数...哈希表要实现使用素数作为除数也很简单,因为哈希表每次扩容都在二倍左右,所以我们只需要写出每个与2倍接近的一个素数,然后将它们放在一个数组中,哈希表每次扩容时都从该数组中确定扩容后的大小即可; STL 源码中的实现如下
STL的组成部分 STL由六大组件构成,分别为:容器、算法、迭代器、仿函数、配接器、空间配置器。彼此之间可以组合套用。 接下来,我们学习的就是关于string相关使用。...string类 string简介 在C语言中,有整形、字符类型、浮点型等,但是=并没有字符串类型。而对于字符串,C语言中通常都是使用字符指针或字符数组来存储。...但是字符指针指向的是字符常量,不可被修改,而字符数组又面临数组越界等情况。并且也不符合面向对象的思想。C++针对于此,string诞生。...在string,或者vector(实际上就是一个数组)中,我们可以将它简单的想象成一个指针,指针++,表示访问下一个元素的地址,*解引用,表示访问该位置的成员。...(当然,它并不是一个指针,因为像链表、树形结构中,各个元素之间的地址并不是紧密相连,后续遇到再仔细讲解,这里就简单理解为指针)。
多字节字符转换 wctomb 多字节字符的字符串操作 将多字节串转换为整数数组 mbstowcs 将多字节串转换为字符数组 mcstowbs 头文件 string.h 字符串处理: 本分类的函数用于对字符串进行合并...const void * p2 size_t n) 存储器拷贝,将P2所指向的共ñ个字节拷贝到P1所指向的存储区中 目的存储区的起始地址 (实现任意数据类型之间的拷贝) void * memset...(void * p int v,size_t n) 将v的值作为p所指向的区域的 值中,n是p所指向区域的大小 该区域的起始地址 char * strcpy(char * p1,const char...'\ n') char * strncpy(char * p1,const char * p2,size_t n) 将P2所指向的字符串(至多Ñ个字符)拷贝到P1所指向的存储区中 目的存储区的起始地址...(与的strcpy()类似) char * strncat(char * p1,const char * p2,size_t n) 将P2所指向的字符串(至多Ñ个字符)连接到P1所指向的字符串的后面
领取专属 10元无门槛券
手把手带您无忧上云