C++基础知识
文章平均质量分 74
求则得之,舍则失之
这个作者很懒,什么都没留下…
展开
-
C++ 正则表达式教程:C++ 中的正则表达式与示例
C++ 正则表达式教程解释了 C++ 中正则表达式的工作,包括正则表达式匹配、搜索、替换、输入验证和标记化的功能。几乎所有的编程语言都支持正则表达式。 C++ 从 C++11 开始直接支持正则表达式。除了编程语言之外,大多数文本处理程序(如词法分析器、高级文本编辑器等)都使用正则表达式。在本教程中,我们将探讨正则表达式的一般细节以及 C++ 编程方面的细节。正则匹配中的基础符号^开头()组[]或,{}几次$结尾1. C++ 中的正则表达式 (Regex)正则表达式是包含一系列字符的表达原创 2022-05-10 23:00:00 · 11310 阅读 · 0 评论 -
C++异常处理
1.概述异常是在程序执行过程中出现的问题。C++ 异常是对程序运行时出现的异常情况的响应,例如尝试除以零。异常提供了一种将控制从程序的一个部分转移到另一个部分的方法。C++ 异常处理建立在三个关键字之上:try、catch和throw。throw - 当出现问题时,程序会抛出异常。这是使用throw关键字完成的。catch - 程序在您要处理问题的程序中使用异常处理程序捕获异常。catch关键字表示捕获异常。try - try块标识将激活特定异常的代码块。它后面跟着一个或多个 catc原创 2022-05-07 22:52:18 · 1370 阅读 · 0 评论 -
OpenCV C++读写XML或YAML文件
本节我们将认识XML和YAML这两种文件类型。所谓XML,即eXtensible Markup Language,翻译成中文为“可扩展标识语言”。首先,XML是一种元标记语言。所谓元标记,就是开发者可以根据自身需要定义自己的标记,比如可以定义标记<book>、<name>。任何满足XML命名规则的名称都可以标记,这就向不同的应用程序打开了的大门。此外,XML是一种语义、结构化语言,它描述了文档的结构与语义。YAML是YAML Ain’t a Markup Language(YA原创 2022-05-08 00:30:00 · 2474 阅读 · 0 评论 -
C++读写ini文件
一般的ini配置文件由节、键、值组成。【参数】(键=值),例如 :key=value;【节】:所有的参数都是以节(section)为单位结合在一起的。所有的section名称都是独占一行,并且section名字都被方括号包围着([XXX])。在section声明后的所有parameters都属于该section。例如:[section1]所以一个包含节,键,值的简单ini配置文件,例如:[port]portName=port1port=1231.使用INIReader.h头文件1.IN原创 2022-05-07 00:30:00 · 6313 阅读 · 3 评论 -
C++读写文件
为了处理文件,首先,导入 fstream 库。 在这个库里面有三种数据类型:ofstream - 用于写入文件ifstream - 用于从文件中读取fstream - 用于读取和写入为了打开文件,我们使用 open() 函数。 该函数接收两个参数:文件名和文件打开方式。可以打开文件的模式如下:ios::in - 打开要读取的文件(ifstream 的默认值)ios::out - 打开要写入的文件(ofstream 的默认值)ios::binary - 以二进制模式打开文件ios::a原创 2022-05-06 00:38:46 · 15448 阅读 · 2 评论 -
智能指针Smart Pointer
1.智能指针std::unique_ptr(single ownership)std::shared_ptr(shared ownership)std::weak_ptr(temp/no ownership)C++11以后出现定义在头文件<memory>中1.0 为啥要有智能指针?普通指针void bar(Entity* e){ // who owns e // How long is e's life cycle? // Should I delete e?}v原创 2022-05-04 21:40:42 · 344 阅读 · 0 评论 -
C++多线程
1.基础知识为了提高CPU的使用率,将某些需要耗时较多的任务或是大量IO操作(IO处理速度很慢),采用多线程可以适当的提高程序的执行效率。C++11之后有了std::thread库,需要引入头文件:先来介绍Thread的成员函数:# 用来查看当前线程的idthread::get_id()# 检查此线程是否还和主线程连接(已经完成join、detach的线程都是false)thread::joinable()# 将线程与主线程的连接切断,并且此线程会继续独立执行下去,直到执行结束时候释放分配的原创 2022-04-17 20:00:00 · 3253 阅读 · 0 评论 -
C++基础知识(十)函数返回数组
1.返回一维数组1.使用static#include <iostream>using namespace std;int* function(){ static int arr[3] = { 0, 1, 2}; return arr;}int main(){ int *arr = function(); cout << arr[0] << endl; cout << arr[1] << endl; cout <原创 2022-02-11 16:33:41 · 3796 阅读 · 0 评论 -
C++基础知识(九)
1.C++中类的数据成员1st way: 在类中进行初始化// 它们是常量,所以一旦初始化就不能更改#include <iostream>using namespace std;class Circle{ const float PI = 3.1415926; // 1st way: 在类中进行初始化 float r;public: Circle(float a){ r = a;} float getArea() { return r * r * PI;}};in原创 2022-01-30 07:45:27 · 243 阅读 · 0 评论 -
C++基础知识(八)
1.C++标准库中vector的operator[]和at()异同两者都用于访问vector中的元素operator[] 不进行范围检查,at()在访问前进行范围检查operator[] 越界时不抛出(未定义的行为),但 at() 越界时抛出operator[]更快,at()更慢#include <vector>#include <iostream>using namespace std;int main(){ vector vec = {1, 2, 4};原创 2022-01-28 17:39:54 · 1131 阅读 · 0 评论 -
C++11中5种创建线程方法
在本文中,我们将讨论如何使用std::thread在c++ 11中创建线程。1.C++11中5种创建线程方法函数指针——这是创建线程的基本形式。Lambda函数仿函数(函数对象)非静态成员函数静态成员函数注意:如果我们同时创建多个线程,它不能保证哪个线程会先启动。如何在Linux上编译:g++ -std =c++11 sample.cpp -lpthread1.1函数指针#include <thread>#include <iostream>void原创 2022-01-18 13:40:31 · 2892 阅读 · 0 评论 -
C++标准模板库之简单队列queue的实现和应用
1.概述队列是逻辑上一维的线性数据结构。所以在队列的代码实现时候,很自然的采用一维数组来存储队列的元素。队列是一种先进先出(First In First Out, FIFO)的线性表。它只允许在一端执行插入操作,而在另一端执行删除操作。允许执行插入操作的一端称为队尾,允许删除的一端称为队头。由于在队列的实际运行中,发生频繁的进队和出队操作,需要设立队首head和队尾tail两个变量。head用于指示队首元素的位置,也就是队首元素在数组的位置下标。tail用于指示队尾元素的位置,也就是队尾元素在数组原创 2021-12-31 10:13:12 · 679 阅读 · 0 评论 -
C++标准模板库之容器map
1.概述map是C++标准模板库STL的一个关联容器,提供一对一的映射关系。一对一中的第一个元素称为关键字(key),别名是first,每个关键字只能在map中出现一次。一对一中的第二个元素称为关键字的值(value),别名是second。map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的类型,如:map<int,int> mp;map<int string> mis;map<string, string>mss;map<float原创 2021-12-30 14:58:03 · 914 阅读 · 0 评论 -
创建和使用 C/C++ DLL动态链接库(2)
一、显式调用和隐式调用的区别我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要比使用静态库程序的体积小,并且使用动态库的程序在运行时必须依赖所使用的动态库文件(.so文件),而使用静态库的程序一旦编译好,就不再需要依赖的静态库文件了(.a文件)。动态库的调用又分为显示和隐式两种方式,区别如下:1、 隐式调用需要调用者写的代码量少,调用起来和使用当前项目下的函数一样直接;而显式调用则要求程序员在调用时,指明要加载的动态原创 2021-12-23 10:53:47 · 1128 阅读 · 0 评论 -
创建和使用 C/C++ DLL动态链接库(1)
(1)动态链接库介绍DLL文件(动态链接库)是一种包含其他程序使用的数据和指令,并可以在需要时调用的文件类型。DLL 文件允许多个程序同时共享函数和类。与可执行程序不同,DLL 文件不能直接运行,而必须由其他程序调用。“动态”一词用于说明数据在内存中并不总是可用的,只有在程序主动调用时才会使用。DLL 文件允许将程序分成多个独立的组件,然后可以添加或删除这些组件以包含或排除某些功能。这非常有用,因为它降低了内存的使用,因为程序不需要一次加载所有内容。例如,在 Windows 中,Kernel32.dl原创 2021-12-21 17:21:17 · 1288 阅读 · 0 评论 -
C/C++面试基础知识总结(二)
本篇是上一篇的继续。9. extern “C”9.1 特点被extern限定的函数或变量是extern类型的被extern "C"修饰的变量和函数是按照C语言方式编译和连接的extern "C"的作用是让C++编译器将extern "C"声明的代码当作C语言代码处理,可以避免C++因符号修饰导致代码不能和C语言库中的符号进行链接的问题。由于c++有重载函数名的功能,而C没有,c++编译器不能仅仅使用函数名作为链接到的唯一id,所以它通过添加有关参数的信息来破坏函数名。C编译器不需要修改名称,原创 2021-10-28 17:36:52 · 134 阅读 · 0 评论 -
2D骨架提取
骨架提取是将二值图像减少到1像素宽的表示。这对于特征提取和(或)表示对象的拓扑结构非常有用。# pip install scikit-imagefrom skimage.morphology import skeletonizefrom skimage import dataimport matplotlib.pyplot as pltfrom skimage.util import invert# Invert the horse imageimage = invert(data.hors原创 2021-10-28 09:14:17 · 2307 阅读 · 0 评论 -
如何在c++/C项目中使用C/C++源文件?
之前学习了C与C++混合编程问题总结,下面着重学习一下在C++/C项目中使用C/C++源文件。在C++项目中,包含C源文件的.h文件会因为C和C++的标准不同而导致很多错误。 如何在 C++/C 项目中使用 C /C++源文件?1.C++ 项目中调用CC++ 调用 C 非常简单:每个 C 函数只有一个可能的非混淆符号,因此不需要额外的工作。main.cpp文件#include <cassert>#include "c.h"int main() { assert(f(原创 2021-10-27 13:18:20 · 1467 阅读 · 0 评论 -
C/C++面试基础知识总结(一)
1.const1.1 作用修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针和指针常量;常量引用,经常用于形参类型,即避免了拷贝,又避免了函数对值的修改;修饰成员函数,说明该成员函数内不能修改成员变量。const 定义的变量只有类型为整数或枚举,且以常量表达式初始化时才能作为常量表达式。其他情况下它只是一个 const 限定的变量,不要将与常量混淆。const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是像#define一样给出的是立即数,所以,const定义的常量原创 2021-10-26 17:43:27 · 480 阅读 · 0 评论 -
C与C++混合编程问题总结
1.什么时候混合C和c++代码?以下是一些要点:1.编译 main() 时必须使用 C++ 编译器(例如,用于静态初始化)2.您的 C++ 编译器应该指导链接过程(例如,以便它可以获取其特殊库)3.您的 C 和 C++ 编译器可能需要来自同一供应商并具有兼容的版本(例如,因此它们具有相同的调用约定)此外,您需要阅读本节的其余部分,以了解如何使您的 C 函数可被 C++ 调用和/或您的 C++ 函数可被 C 调用。顺便说一句,还有另一种方法可以处理这整个事情:使用 C++ 编译器编译所有代码(原创 2021-10-25 17:25:16 · 1151 阅读 · 0 评论 -
使用Microsoft C++编译器配置VSCode
使用Microsoft C++编译器配置VSCode(一)预备知识(二)检查您的Microsoft Visual c++安装(三)创建Hello World3.1添加一个源代码文件3.2添加`helloworld`源代码3.3探索智能感知3.4构建helloworld.cpp3.5运行构建3.6修改tasks.json(四)调试helloworld.cpp4.1启动调试会话4.2逐步执行代码(五)设置watch(六) C/C++配置6.1编译器路径(七)重用您的c++配置(八)在`Developer Com原创 2021-10-21 17:06:06 · 4280 阅读 · 2 评论 -
OpenCV基础(22)使用OpenCV生成及读取二维码以及与Zbar比较
二维码(QR码)是一种矩阵条形码,是一种机器可读的光学标签,其中包含有关其所附着物品的信息。实际上,二维码(QR码)码通常包含指向网站或应用程序的定位器,标识符或跟踪器的数据。最近,OpenCV 4.0 发布了许多改进和新功能。其中之一是二维码扫描仪。我们在之前的文章中已经写过关于条码和二维码扫描器的文章,它使用了一个外部库——ZBar。因此,我们想检查 OpenCV 扫描仪的工作原理,以及它是否比 Zbar 扫描仪更好。在这篇文章中,我们将看到如何使用来自 OpenCV 的这个新的二维码扫描器。如果您想原创 2021-10-12 15:41:50 · 5662 阅读 · 0 评论 -
OpenCV基础(21)使用 OpenCV 中的applyColorMap实现伪着色
在本教程中,我们将首先展示一种使用 OpenCV 的预定义颜色图对灰度图像进行伪彩色/假彩色的简单方法。如果您更愿意使用自己的颜色图,我们还将展示一种定义自定义颜色图的方法。行星和其他空间物体的灰度图像通常是伪彩色的,以显示细节,并以不同的颜色标记不同材料对应的区域。在本教程中,我们将使用新视野号拍摄的一张冥王星的灰度照片作为示例。1.什么是颜色图?假设我们想在地图上显示中国不同地区的温度。我们可以将温度数据叠加在中国地图上作为灰度图像——较暗的区域代表较冷的温度,较亮的区域代表较热的区域。这样的表.原创 2021-10-12 13:50:09 · 4764 阅读 · 0 评论 -
C++基础知识(七)
压缩包管理Gzip命令能对目录进行压缩吗?a) NOGzip命令对文件压缩完毕之后会保留原文件吗?如果能请写出该命令。a) NO,b) Gzip ./*.txt , c) 压缩后的文件的后缀为.gzGzip命令对多个文件压缩以后会生成一个压缩包还是多个,都是什么格式?a) 多个 b) .gzBzip2命令能够对目录进行压缩吗?a) NOBzip2命令对文件压缩完毕之后会保留...原创 2020-03-18 14:31:46 · 118 阅读 · 0 评论 -
C++基础知识(六)
函数指针函数指针的目的与意义:抽象数据与抽象代码函数的地址:函数入口位置,将该数值作为数据保存起来,就可以通过特殊手段调用该函数typedef void* ADT;typedef const void * CADT;函数指针的定义数据类型 (as_string)(ADT object);as_string作为变量可以指向任何带有一个ADT类型参数的返回值char类型的函数函数指针...原创 2020-03-04 22:14:53 · 136 阅读 · 0 评论 -
C++基础知识(五)
字符串字符串的表示三种理解角度:作为字符数组,作为指向字符的指针,作为抽象的字符串整体字符数组多个字符数组连续存储时候的问题:无法区分存储空间刚好连续的多个字符数组。== 解决方案==:字符数组末尾添加结束标志’\0’示例:char s[9] = {‘C’, ‘P’, ‘P’,’-’,‘P’,‘r’,‘o’,‘g’,’\0’};char t[6]={‘H’,‘e’,‘l’,...原创 2020-03-03 23:07:47 · 153 阅读 · 0 评论 -
C++基础知识(四)
指针数据对象的地址与值地址:数据对象的存储位置在计算机中的编号值:在该位置处存储的内容地址与值是辩证统一的关系指针的定义与使用a. 指针的定义格式格式:目标数据对象类型* 指针变量名称;示例一:定义p为指向整数的指针int* p;示例二:定义p为指向结构体类型的指针 struct POINT{int x, y;}; POINT *p;b. 多个指针变量的定义示例三:i...原创 2020-02-29 22:35:40 · 163 阅读 · 0 评论 -
C++基础知识(三)
数组数组的意义与性质数组的定义定义格式:元素类型 数组名称[常数表达式]示例:int a[8]; // 定义包含8个整数元素的数组特别说明常数表达式必须是常数和常量,不允许为变量错误示例:int count = 8; int c[count];数组元素编号从0开始计数,元素访问格式为a[0]、a[1]、…不允许对数组进行整体赋值操作,只能使用循环逐一复制元素错误示例三:i...原创 2020-02-28 23:50:53 · 251 阅读 · 0 评论 -
C++基础知识(二)
数学库头文件:math.h/cmath库文件:libmLinux链接方式:g++ -lm main.cpp数学函数:三角函数与反三角函数系列幂函数与对数函数系列其它数学函数标准辅助函数库工具与辅助函数头文件:stdlib.h/cstdlib常用函数void exist(int status);void free(void *p);void mallocsize_t si...原创 2020-02-28 22:09:44 · 119 阅读 · 0 评论 -
C++基础知识(-)
1. 程序设计的基本流程2. 编辑与编译3. 宏与常量宏定义#define 指令:预处理命令例如:#define PI 3.14一旦定义,可以代替常量使用宏定义不是常量程序中应优先使用常量而不是宏目的与意义增强程序可读性使用有意义的名字命名增强程序的可维护性将值定义为符号常量,则程序中仅需修改一次赋值语句的简写形式加赋:x += a 等价于 x = x...原创 2020-02-25 22:37:58 · 145 阅读 · 0 评论