![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【------C++------】
文章平均质量分 54
ooMelloo
☆人工智能/机器学习/深度学习工程师进击中
☆立志成为数学好编程好业务好的三好青年
☆人必有痴 而后有成
展开
-
C++11新特性——auto和decltype
一、auto和decltype1.auto和decltype都是C++11新增的关键字,都用于类型自动推导。类型格式auto varname = value; //auto的语法格式decltype(exp) varname [= value]; //decltype的语法格式,中括号可不要其中,varname 表示变量名,value 表示赋给变量的值,exp 表示一个表达式,方括号[ ]表示可有可无。auto 和 decltype 都会自动推导出变量 varname 的类型:原创 2021-05-25 15:20:08 · 308 阅读 · 0 评论 -
判断某点在多边形内——方法二
/* 原理: 将测试点的Y坐标与多边形的每一个点进行比较,** 会得到测试点所在的行与多边形边的所有交点。** 如果测试点的两边点的个数都是奇数个,** 则该测试点在多边形内,否则在多边形外。 */#include <stdio.h>#include <iostream>/* 函数功能: 判断点(x, y)是否在有ploy_sides个顶点的多边形内 *//* 参数: poly_sides 测试多边形的顶点数** poly_x 测.原创 2021-05-18 18:00:02 · 305 阅读 · 0 评论 -
判断某点在多边形内——方法一
算法思路判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况。该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。如下图所示:算法步骤如下:已知点point(x,y)和多边形Polygon的点有序集合(x1,y1;x2,y2;….xn,yn;); 以point为起点,以无穷远为终点作平行于X轴的射线line(x,y; -∞,y);循环取得多边形的每原创 2021-05-18 17:56:46 · 923 阅读 · 0 评论 -
C/C++中break、return、continue和goto在循环语句中的使用
话不多说,直接上代码一、breakbreak用于多层嵌套的的while、for循环语句时,可以跳出最接近break的循环语句。此外还用于switch语句break当前case,以跳出当前switch语句。int main(int argc, char **argv){ printf("===>begin\n"); for (int i = 0; i < 5; i++) { if(i<2) {原创 2021-05-18 17:48:29 · 1053 阅读 · 1 评论 -
c++ class 类名 和 include 的区别
A.hclass A{public: B* m_;}1234这样会编译出错,因为B没有定义#include "B.h"class A{public: B* m_;}123456但是这样,一旦B的定义修改,那么A.h也就会重新编译,导致所有用到A.h的文件也需要重新编译,这样就造成了编译依赖,增加了编译的时间,在大型项目中,如果很多这样的地...原创 2020-03-31 19:48:24 · 355 阅读 · 0 评论 -
C++虚函数解析
在C++中,在基类的成员函数声明前加上关键字virtual即可让该函数成为虚函数,派生类中对此函数的不同实现都会继承这一修饰符,允许后续派生类覆盖,达到迟绑定的效果。即便是基类中的成员函数调用虚函数,也会调用到派生类中的版本例如,一个基类Animal有一个虚函数eat。子类Fish要实做一个函数eat(),这个子类Fish与子类Wolf是完全不同的,但是你可以引用类别 Animal 底下...原创 2020-03-31 19:47:32 · 176 阅读 · 0 评论 -
浅谈C/C+内存管理、内存泄漏、堆栈
1.内存分配区间: 对于一个C语言程序而言,内存空间主要由五个部分组成:代码段(.text)、数据段(.data)、静态区(.BSS)、堆和栈组成。 BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量和静态变量(这里注意一个问题:一般的书上都会说全局变量和静态变量是会自动初始化的,那么哪来的未初始化的变量呢?变量的初始化可以分...原创 2019-04-18 17:39:00 · 230 阅读 · 0 评论 -
面向对象编程(一):类&对象
概要C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。C++ 类定义定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它...原创 2019-05-05 15:14:46 · 174 阅读 · 0 评论 -
面向对象编程(二):继承
C++继承面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行时间的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。继承代表了is a关系。例如,哺乳动物是动物,狗是哺乳动物...原创 2019-05-05 15:18:33 · 198 阅读 · 0 评论 -
面向对象编程(三):重载运算符和重载函数
C++重载运算符和重载函数C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,...原创 2019-05-05 15:22:28 · 446 阅读 · 0 评论 -
面向兑现编程(四):多态
C++多态多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。下面的实例中,基类 Shape 被派生为两个类,如下所示:实例#include <iostream> using namespace std; class Shape { ...原创 2019-05-05 15:25:22 · 137 阅读 · 0 评论 -
C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系
前言所谓的内存泄漏就是用动态变量机制new了一段内存空间,以后不再需要这个变量的时候没有delete它,或者在没有delete之前,指针又指向了另外一个地址,这样先前的空间就丢失了。内存泄漏最典型的情况就是在函数中申请了一段动态空间,在函数返回前就没有delete它,造成内存泄漏。此外对new操作的失败检查也是一个良好的编程习惯,虽然一般很少遇到,但是这种内存分配的失败不是不会发生...原创 2019-04-18 15:00:45 · 1517 阅读 · 0 评论 -
详解float**类型和float*类型
先上图:直接将num[0][0]的地址赋给pt只能得到最后一维的值,原因是num的之前维度的值存贮是不连续的,所以无法得到其他维度的值,只能通过下面的方式,在每个维度进行地址赋值。如下:除此之外,可以另行开辟空间,将num[i][j]的值存储到pt[i]中。例如:...原创 2019-04-09 20:10:30 · 6471 阅读 · 2 评论 -
C++经典面试题(基础算法版)
#添加头文件#include <assert.h>#include <string.h>#include <stack> 1.实现strcpy. char* MyStrCpy( char *pDest, const char *pSrc ) { if( nullptr == pDest || nullptr == pSrc...原创 2019-01-31 15:49:45 · 775 阅读 · 0 评论 -
Qt总结之十九:Qt中控件new之后需不需要delete的问题
这里也牵涉到内存管理机制 可以参考文章:https://blog.csdn.net/Aidam_Bo/article/details/85698862 QT的父子对象机制是在 QWidget和QOject中实现的。当我们使用父对象来创建一个对象的时候 ,父对象会把这个对象添加到自己的子对象列表中。当这个父对象被删除的时候,它会遍历它的子对象类表并且...原创 2019-01-11 15:36:54 · 7602 阅读 · 0 评论 -
C++总结:static_cast ,reinterpret_cast
static_cast ,reinterpret_cast用法:static_cast < type-id > ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:(1)用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用...原创 2019-01-11 11:44:24 · 453 阅读 · 0 评论 -
Qt总结之十四:uint8_t / uint16_t / uint32_t /uint64_t数据类型详解
一、C++基础数据类型(一)如下图C++的主要数据类型,主要分为三类:布尔型,整型(char型从本质上说,也是种整型类型,它是长度为1的整数,通常用来存放字符的ASCII码),浮点型。(二)byte(字节)和bit(位)普及如下:byte为字节,bit为位,1byte=8bit这两者应用的场合不同。通常用bit来作数据传输的单位,因为物理层,数据链路层的传输对于用户是透明...原创 2019-01-04 15:02:54 · 34156 阅读 · 2 评论 -
Qt总结之十二:C/C++内存分配方式与存储区
一、C/C++内存分配有三种方式 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 从堆上分配,亦称动态内存分配。程序在运行的时候用m...原创 2019-01-03 15:56:57 · 2662 阅读 · 0 评论 -
面向对象编程(五):数据抽象
C++数据抽象数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。数据抽象是一种依赖于接口和实现分离的编程(设计)技术。让我们举一个现实生活中的真实例子,比如一台电视机,您可以打开和关闭、切换频道、调整音量、添加外部组件(如喇叭、录像机、DVD 播放器),但是您不知道它的内部实现细节,也就是说,您并不知道它是如何通过缆线接收信号,如何转换信号,...原创 2019-05-05 15:27:10 · 562 阅读 · 0 评论 -
面向对象编程(六):数据封装
C++数据封装所有的 C++ 程序都有以下两个基本要素:程序语句(代码):这是程序中执行动作的部分,它们被称为函数。 程序数据:数据是程序的信息,会受到程序函数的影响。封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的 OOP 概念,即数据隐藏。数据封装是一种把数据和操作数据的函数捆绑在一...原创 2019-05-05 15:29:05 · 782 阅读 · 0 评论 -
C++:多种通信方式(包括共享内存详解)
一、线程间通信二、进程间通信原创 2019-05-17 17:04:49 · 990 阅读 · 0 评论 -
C++编程:输入/输出 I/O
概要C++ 标准库提供了一组丰富的输入/输出功能,本博客主要讨论 C++ 编程中最基本和最常见的 I/O 操作。C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。I/O 库头文件下列的头文件在 C++ 编程中很重要。头...原创 2019-05-06 16:05:03 · 928 阅读 · 0 评论 -
类和对象编程(九):类的静态成员
C++类的静态成员我们可以使用static关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符::来重新声明静态变量从而对...原创 2019-05-05 15:58:51 · 659 阅读 · 0 评论 -
类和对象编程(八):指向类的指针
C++指向类的指针一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符->,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。下面的实例有助于更好地理解指向类的指针的概念:#include <iostream> using namespace std;class Box{ ...原创 2019-05-05 15:54:34 · 541 阅读 · 0 评论 -
类和对象编程(七):this指针
C++this 指针在 C++ 中,每一个对象都能通过this指针来访问自己的地址。this指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。友元函数没有this指针,因为友元不是类的成员。只有成员函数才有this指针。下面的实例有助于更好地理解 this 指针的概念:实例#include <iostream> usi...原创 2019-05-05 15:53:20 · 229 阅读 · 0 评论 -
类和对象编程(六):内联函数
C++内联函数C++内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字inline,在调用函数之前需要对函数进行定义。如果已定义的函数...原创 2019-05-05 15:50:12 · 480 阅读 · 0 评论 -
类和对象编程(五):友元函数
C++友元函数类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字frie...原创 2019-05-05 15:48:24 · 519 阅读 · 0 评论 -
类和对象编程(四):拷贝构造函数
C++拷贝构造函数拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象。 复制对象把它作为参数传递给函数。 复制对象,并从函数返回这个对象。 如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一...原创 2019-05-05 15:45:22 · 315 阅读 · 0 评论 -
类和对象编程(三):构造函数&析构函数
类的构造函数类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。下面的实例有助于更好地理解构造函数的概念:实例#include <iostream> using namespace std; class Line{...原创 2019-05-05 15:42:34 · 233 阅读 · 0 评论 -
类和对象编程(二):类访问修饰符
C++类访问修饰符数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记public、private、protected来指定的。关键字public、private、protected称为访问修饰符。一个类可以有多个 public、protected 或 private 标记区域。每个标记区域在下一个标记区域开始...原创 2019-05-05 15:39:24 · 257 阅读 · 0 评论 -
类和对象编程(一):类成员函数
C++类成员函数类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。让我们看看之前定义的类 Box,现在我们要使用成员函数来访问类的成员,而不是直接访问这些类的成员:class Box{ public: double length; // 长...原创 2019-05-05 15:35:09 · 300 阅读 · 0 评论 -
面向对象编程(七):接口(抽象类)
C++接口(抽象类)接口描述了类的行为和功能,而不需要完成类的特定实现。C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来指定的,如下所示:class Box{ public: // 纯虚函数 ...原创 2019-05-05 15:31:12 · 205 阅读 · 0 评论 -
c++ 数据类型转换: static_cast、dynamic_cast、reinterpret_cast和const_cast
【目录】引言static_cast 定义dynamic_cast 定义举例:下行转换(把基类的指针或引用转换成子类表示)举例:上行转换(把子类的指针或引用转换成基类表示)举例: static_cast 用于基本类型之间、基本类型指针和空指针间的转换reinterpret_cast 定义举例:reinterpret_cast用法const_cast 定义举例:...原创 2018-12-19 17:58:21 · 380 阅读 · 0 评论 -
C++/Qt文件写入读取速度比较
【背景】关于项目读写文件数据,尤其时读写大数据时,特别费时,今天做了个测试【资源大小】91.2MB的数据out数据【方法】C++:采用ofstreamQt:采用QFile+QTextStream C++写入数据 QTime m_time; ofstream ofs("D:/Projects/01-Sar/Sar/Sar/textC++.tx...原创 2018-11-21 14:52:58 · 7439 阅读 · 0 评论 -
C/C++文件操作效率比较——FILE/fstream
【背景】利用GetTickTount函数进行效率测试,对比C/C++在读写文本文件和二进制文件时耗时大小【设备】电脑配置如下:(CPU四核八线程)代码如下:#include <iostream>#include <fstream>#include <windows.h>#include <string.h>#include &l...转载 2018-11-21 14:48:57 · 3338 阅读 · 1 评论 -
【VS】项目属性配置(中)
本文主要针对在项目每次新建时需要的头文件include、lib、dll进行配置的问题头文件include上面头文件include是在做OSG三维相关的项目所添加的头文件。其中,用到Qt的头文件include、OSG的头文件include。不同版本的OSG会碰到头文件目录问题,不能仅仅引用/添加$(QTDIR)\include,有的头文件在子目录下,还需针对不同版本的Qt/OSG在头...原创 2018-08-22 18:03:49 · 1029 阅读 · 0 评论 -
【VS】项目属性配置(上)
首先,我们一般不会修改解决方案的属性,而是设置每个项目各自的属性.接着上一篇文章,我们来看看我们应该怎样来设置各项目的项目属性更好:我们以NYOJ_001项目的Debug版的设置为例:在常规选项里,我们一般会设置输出目录(即生成.exe文件的目录),中间目录(即中间文件的目录)。当然你也可以在这里设置生成的.exe文件的文件名甚至扩展名等。如下图所示:一般设置如下的目录:如...转载 2018-08-22 15:34:10 · 1492 阅读 · 0 评论 -
Qt之QDockWidget嵌套布局详解-实现Visual Studio布局
概述许多工程软件,如Qt Creator,VS,matlab等,都是使用dock布局窗口,这样用户可以自定义界面,自由组合窗口。Qt的嵌套布局由QDockWidget完成,用Qt Creator拖界面得到的dock布置形式比较固定,不能得想要的任意组合形式,要得到如下图所示的效果,后续布局必须通过代码来完成。下面说说如何实现完全自由的界面布局效果:QDockWidget在QMainWi...转载 2018-07-27 15:26:57 · 30120 阅读 · 15 评论 -
OpenCV3.4.2+VS2015开发环境搭建
前言什么是OpenCV?可能还有人不清楚吧,简单地说,OpenCV——Open Source Computer Vision Library,即开源计算机视觉库,它是基于C语言和部分C++语言来开发,可用于计算机视觉、图像处理以及模式识别和跟踪。1.软件下载下载OpenCV安装包: 到OpenCV的官网(http://opencv.org/)下载最新版本的OpenCV安装包,由...原创 2018-07-27 14:23:57 · 3268 阅读 · 1 评论 -
Qt之路径总结
在做Qt项目的时候,我们难免遇到到文件路径问题。 如QFile file("text.txt")加载不成功、QPixmap("../text.png") 加载图片不成功等等。今天就来做一个关于Qt路径问题的小结! 一、Qt路径首先需要弄清楚两个概念:绝对路径与相对路径绝对路径:文件在硬盘上真正存在的路径。例如“text.jpg”这个图片是存放在硬盘 的“E:\book...原创 2018-07-30 14:25:34 · 4414 阅读 · 0 评论