C/C++
sampson MrLiang
笨点不要紧,坚持最重要!
展开
-
stl之algorithm库函数集合
不修改内容的序列操作:修改内容的序列操作:划分操作:排序操作:二分法查找操作:集合操作:堆操作:最大/最小操作:巡防算法for_each(容器起始地址,容器结束地址,要执行的方法) #include<iostr...转载 2020-03-19 21:05:46 · 270 阅读 · 0 评论 -
模板类使用友元函数重载操作符需要注意的问题
当我们在同一个cpp文件里使用friend函数重载操作符,但是声明和实现分开时,我们需要对friend函数的声明做特殊处理,否则会产生如下错误:模板类friend函数在外面.obj : error LNK2019: 无法解析的外部符号 "class std::basic_ostream<char,struct std::char_traits<char> > &...原创 2020-03-15 21:28:58 · 378 阅读 · 1 评论 -
static_cast,reinterpret_cast,const_cast与dynamic_cast的使用
1.static_cast 用来进行比较“自然”和低风险的转换,比如整形和实数型、字符型之间互相转换。用来处理隐式转换,类型C语言的(newType)expression。在相关类型之间的转换中使用,不能在不同类型的指针之间互相转换,也不能用于整型和指针之间的互相转换,也不能用于不同类型的引用之间的转换,但可以在void*与其他指针之间转换。 对类的转换只能...原创 2020-02-04 09:28:58 · 138 阅读 · 0 评论 -
C++11 lambda表达式
lambda语法:[ 捕 获 列 表 ]( 参 数 列 表 ) mutable throw(异 常 类型) -> 返 回 类 型 {函数体…}捕获列表方式:• [] 空捕获列表• [name1, name2, . . . ] 捕获一系列变量• [&] 引用捕获, 让编译器自行推导捕获列表• [=] 值捕获, 让编译器执行推导应用列表参数列表...原创 2020-01-19 09:57:41 · 161 阅读 · 0 评论 -
C++ STL标准库容器介绍
容器分类序列容器vector:初始分配一块连续内存,必要时可自动增加空间的数组;只能在尾部进行进行操作,体现在push_back和pop_back,支持随机访问[]和at();存取快,插入和删除慢。list:双向链表,包括前后驱指针,无需指定特定大小内存可以自由伸缩,内存不连续,支持任何位置插入和删除元素,可以在两端进行push和pop操作;不支持随机访问,只能从头或...原创 2020-01-18 11:49:27 · 287 阅读 · 0 评论 -
std::function、std::bind 、std::placeholder
std::function: 是一种通用、多态的函数封装,它的实例可以对任何可以调用的目标实体进行存储、复制和调用操作,它也是对 C++ 中现有的可调用实体的一种类型安全的包装器(相对来说,函数指针的调用不是类型安全的),换句话说,就是函数的容器。它可以容纳除了类成员函数指针之外的所有可调用对象,它可以用统一的方式处理函数、函数指针、函数对象,并能保存和延迟他们的执行。std:...原创 2019-12-31 19:22:46 · 315 阅读 · 0 评论 -
C++11 Enum class
C++11新增了enum class,传统c++ enum是非类型安全,而enum class是类型安全的,增强了类型检测功能。同时两个enum class中的值名是可以相同的。#include<iostream>//重载“<<”符,对enum类型进行处理,以致能enum类型能通过<<这个运算符来输出。如果是enum类型,则定义strea...原创 2019-12-30 18:46:47 · 520 阅读 · 0 评论 -
C++11 std::move和std::forward
下文先从C++11引入的几个规则,如引用折叠、右值引用的特殊类型推断规则、static_cast的扩展功能说起,然后通过例子解析std::move和std::forward的推导解析过程,说明std::move和std::forward本质就是一个转换函数,std::move执行到右值的无条件转换,std::forward执行到右值的有条件转换,在参数都是右值时,二者就是等价的。其实std::mo...转载 2019-11-05 10:35:00 · 186 阅读 · 0 评论 -
C++ STL 空间配置器
1、概述以STL运用的角度而言,空间配置器是最不需要介绍的,它总是藏在一切组件的背后,默默工作。整个STL的操作对象都存放在容器之中(vertor、list),而容器一定需要配置空间以放置资料,这就是空间配置器的作用。虽然STL提供了让我们自定义空间配置器的接口,但是不建议自己定义,因为标准提供的空间配置器是安全的,且效率也不错的。所以我们使用时,一般都会使用默认的配置器。如下:te...转载 2019-09-16 19:28:08 · 196 阅读 · 0 评论 -
C++11 std::move和std::forward
下文先从C++11引入的几个规则,如引用折叠、右值引用的特殊类型推断规则、static_cast的扩展功能说起,然后通过例子解析std::move和std::forward的推导解析过程,说明std::move和std::forward本质就是一个转换函数,std::move执行到右值的无条件转换,std::forward执行到右值的有条件转换,在参数都是右值时,二者就是等价的。其实std::mo...转载 2019-09-12 16:11:18 · 446 阅读 · 0 评论 -
C++多继承的二义性
导言 在派生类中对基类成员访问应该是唯一的,但是在多继承时,可能会导致对基类某成员访问出现不一致的情况,这就是C++多继承中的二义性。出现二义性主要有以下两种情况情况一: 如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的成员变量进行访问时,可能产生二义性,继承关系如下图所示:另外我们可以通道实例证明:#incl...原创 2019-06-30 14:04:11 · 793 阅读 · 0 评论 -
C++父子类指针步长问题
C++给我们提供了多态,可以使得同样类型的变量,调用同样的方法,却产生完全不同的行为;但在使用多态时需要指针步长的问题。防止因为步长而出现问题。下面我们通道一个案例说明C++指针步长问题,其实只要稍微留意就可以避免此问题,并不是难点,而是在编码时需要留意即可。#include <iostream>using namespace std;class P...原创 2019-07-02 21:20:44 · 244 阅读 · 0 评论 -
C++11新特性:shared_ptr与weak_ptr(实例测试)
std::shared_ptr std::shared_ptr是通过指针保持对象共享所有权的智能指针,多个std::shared_ptr引用对象占用同一个对象。当指针对象被另一个对象引用时可以把所有权共享给另一个引用指针对象,被管理的指针是当use_count抵达0是被删除。在下列情况之一出现时销毁对象并释放内存:最后占有std::shared_ptr对象被销毁时; 最后占有...原创 2019-06-21 18:17:52 · 5626 阅读 · 0 评论 -
拷贝构造函数的4中应用场景
周末闲着没事,写点以前的东西记录一下。 对象的不同使用方式会导致拷贝构造函数在不同时期进行调用,理解拷贝构造函数的调用时机有助于我们认识程序运行机制,帮助我们编写更高效的程序。直接上代码: #include <iostream> using namespace std; class copy { ...原创 2019-06-15 13:37:58 · 505 阅读 · 0 评论 -
C++11新特性:std::thread多线程
在C++11以前,C++的多线程编程在不同到平台使用不同的API,比如linux平台使用pthread,windows平台使用winSDK中的Create,或者依赖其他第三方接口实现,一定程度上影响了代码的移植性。C++11中,引入了boost库中的多线程部分内容,形成C++标准,形成标准后的boost多线程编程部分接口基本没有变化,这样方便了以前使用boost接口开发的使用者切换使...原创 2019-06-11 20:01:18 · 1599 阅读 · 0 评论 -
C++11新特性:STL容器
1、C++11新特性:STL容器 C++11在STL容器方面也有所增加,新增了一下比较好用的容器,C++容器也越来越完整,越来越丰富,可以在不同场景下能选择跟具合适的容器,提高我们的效率。1.1、std::array std::array是封装了固定大小的容器,其结合了C风格数组的性能和C++可访问性容器的优点,如支持容器大小,可赋值,随机访问等。#include &l...原创 2019-06-10 17:51:00 · 927 阅读 · 0 评论 -
C++11新特性:关键字
1、auto关键字auto是C++11新增的自动变量,其原理是编译器根据上下文情况,确定组通变量的真正类型,并不是弱类型语言中的弱化变量。在真正的编程中建议尽量少使用auto,直接写出变量类型更加清晰易懂,在不知道变量类型或者冗长复杂的类型中可以考虑使用。1.1 用于常用类型推导int main(){ auto var = 10; auto str = "hello...原创 2019-06-10 17:38:14 · 702 阅读 · 0 评论 -
C++对C语言哪些功能进行了加强?
概述: C++是在C语言的基础上发展而来,但他们两并不是竞争关系。C++继承了C语言的很多特性,同时也对某些特性进行了加强,以下进行逐一讲解。变量检测更加严格在C语言中重复定义多个同名全局变量,编译器可以正常编译,属于合法行为,最终会被连接到全局数据区的同一个地址上。如:int g_var;int g_var=0;C编译器对以上代码不会报错。而在C++中...原创 2019-06-06 18:27:40 · 396 阅读 · 0 评论 -
C++静态(static)成员函数和成员变量的使用
静态成员变量和成员函数是指在类中以static修饰的变量和函数。直接看例子熟悉其使用和特性: #include <iostream> using namespace std; class test { public: test() :a(0), b(0) { } ...原创 2019-06-16 16:24:05 · 3820 阅读 · 0 评论 -
C++面向对象模型初步分析
在C语言中“数据(变量)”和处理数据的操作(函数)是分开声明的,即C语言本身并没有提供“数据和函数”之间直接关联的功能。C++中的class从面向对象出发,将变量和函数集中定义在一起,实现了两者之间的绑定。但从计算机的角度分析,程序同样有数据段和代码段构成,那么C++是如何从面向对象理论到计算机化程序之间的转化的?即C++编译器是如何管理类和对象,以及类和对象之间的关系?类和方法之间的调用关...原创 2019-06-16 22:55:16 · 152 阅读 · 0 评论 -
C++命名规则
转自:https://www.cnblogs.com/ggjucheng/archive/2011/12/15/2289291.html如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一、带层次结构、清晰明了的命名准则就是必不可少而且非常好用的工具。活跃在生物学、化学、军队、监狱、黑社会、恐怖组织等各个领域内的大量有识先辈们都曾经无数次地以实际行动证明了以上公理的正确性。除了...转载 2020-04-25 20:01:34 · 169 阅读 · 1 评论 -
C++运算符重载详解与实例分析(全部经过测试)
1、运算符重载什么是重载? 所谓重载,就是重新赋予新的含义。运算符重载就是赋予运算符新的含义(新功能),其本质是一个函数。为什么要重载运算符?C++预定义中的运算符的操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型是没办法操作的,此时就需要重载运算符来实现。运算符函数定义的一般格式如下: <返回类型说明符> operat...原创 2019-06-25 14:30:19 · 8201 阅读 · 3 评论 -
C与C++内存分配和释放机制混合使用探讨
我们都知道C利用库函数malloc和free来分配和释放内存,C++提供较为简单而功能强大的运算符new和delete来取代malloc和free;但C++为了兼容C语言,同样保留了malloc和free,只是不建议用户使用而已。那么C++两对内存分配和释放函数(或操作符)是否完成同样的功能?能不能混搭使用?它们之间有什么不同?首先从下面的几个例子开始分析和回答这几个问题...原创 2019-06-16 11:16:59 · 373 阅读 · 0 评论