C++基础
文章平均质量分 68
关于C++基础知识讲解
酷小川
研究方向:嵌入式
展开
-
C++ 内存管理的总结与思考
一、内存区域堆、栈、自由存储区、全局变量区、常量存储区。主要谈一下堆和自由存储区的区别:自由存储区:是两个动态内存区域之一,由new/delete分配/释放。对象生存期可以小于分配存储的时间;也就是说,自由存储对象可以在不立即初始化的情况下分配内存,也可以在不立即释放内存的情况下销毁内存。在分配存储期间,但在对象的生命周期之外,可以通过void*访问和操纵存储,但不能访问、获取其地址或以其他方式操纵原型对象的非静态成员或成员函数。Heap:堆是另一个动态内存区域,由malloc/free及其原创 2021-08-03 14:03:19 · 234 阅读 · 0 评论 -
C++ 汉字转首字母
// Test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#include <iostream> #include <string> using namespace std;static char convert(wchar_t n);static bool In(wchar_t start, wchar_t end, wchar_t code);.原创 2020-11-12 20:58:17 · 1202 阅读 · 0 评论 -
C++ 链表的交点
方法一:利用set容器struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){}};ListNode* getInstersectionNode(ListNode *headA, ListNode *headB){ std::set<ListNode*> node_set; while (headA) { node_set.insert(headA); head原创 2020-10-27 00:36:19 · 248 阅读 · 0 评论 -
C++ 链表反转与链表区域反转
// test1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include "pch.h"#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <string>#include <vector>#include <vector>#include <stdio.h>#include <string.h>#include.原创 2020-10-20 14:00:31 · 239 阅读 · 0 评论 -
c++ bind函数
一、std::bind介绍 可将std::bind函数看作一个通用的函数适配器,它可接受一个可调用对象,生成一个新的可调用对象来适配原对象的参数列表。作用:(1)将可调用对象和其参数绑定成一个仿函数。(2)只绑定部分参数,减少可调用对象传入的参数。二、std::bind绑定一个成员函数 int add(int x,int y){return x+y;}auto fn_add=std::bind(add,_1,2);std::cout<<fn_add(3)<<s原创 2020-09-19 15:14:31 · 2262 阅读 · 0 评论 -
warning: ISO C++ forbids converting a string constant to ‘char*‘ [-Wwrite-strings]
在linux下编写C++代码:char* p="wqojbk";会跳出警告:warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]这是因为在赋值操作的时候,等号两边的变量类型不一样,那么编译器会进行一种叫做 隐式转换(implicit conversion) 的操作来使得变量可以被赋值。上面的表达式中,等号右边的"eqojbk"是一个不变常量,在c++中叫做string lite原创 2020-09-19 10:30:02 · 24972 阅读 · 0 评论 -
C++ string 字符分割
#include <vector>#include <stdio.h>#include <string.h>#include <string>using namespace std;int main(){ string params="10.00,1.00,1"; char parm[20]; strcpy(parm,params.c_str()); const char *sep=","; char *p=strt.原创 2020-09-07 23:36:10 · 754 阅读 · 0 评论 -
error:‘>>‘ should be ‘> >‘ within a nested template argument list
编译时出现:error: '>>'should be '> >'within a nested template argument list错误。错误原因:使用C++11之前标准的编译器会将">>“视为移位符号。解决方法:在'>>'中间加一个空格变成'> >'即可。...原创 2020-08-27 09:43:40 · 4830 阅读 · 0 评论 -
protobuf 相关知识 C++
protobuf是一种序列化方法.1. message字段包括以下几种情况(1)singular:包涵该字段一次或则零次(2)repeated:可以重复任意多次2.可以在.proto文件中定义多种message类型。但是当单个文件定义大量不同依赖关系的messages时,会导致依赖性膨胀。建议每个.proto文件包含尽可能少的message类型。3.对于C++,编译器从每个.proto生成一个.h和.cc文件,其中包含文件中描述的每种message类型对应的类。4.保留值:如果.原创 2020-06-28 18:56:36 · 1035 阅读 · 0 评论 -
C++ 右值引用与左值引用
意义:可以避免无谓的复制,提高程序的性能。左值:表达式结束后依然存在的持久化对象右值:表达式结束后不再存在的临时对象所有的具名变量和对象都是左值,而右值不具名。区分左值和右值的快捷方法:看能不能对表达式取地址,如果能则是左值,否则就是右值。右值分为纯右值和将亡值。纯右值是C++98中的右值概念,如非引用函数返回的临时变量;一些运算表达式,如4+6产生的临时变量;不和对象关联的字面量值,如10,‘s’,true,“hello”等这些不能被取地址的值。将亡值:c++11中新增的和右值引原创 2020-06-18 15:25:46 · 821 阅读 · 0 评论 -
C++ set容器排序
#include <string>#include <iostream>#include <set>class Compare //仿函数{public: bool operator()(int v1,int v2) { return v1 > v2; }};void test(){ std::set<int> m; m.insert(10); m.insert(20); m.insert(80); m.inse.原创 2020-05-20 00:52:47 · 1311 阅读 · 0 评论 -
C++ 运算符重载
一、+ 运算符重载#include <string>#include <iostream>class Person{public: //成员函数重载运算符+ Person operator+(Person &p) { Person temp; temp.age = this->age + p.age; return temp; } int age; std::string name;};//全局函数重置运算符+//Pers原创 2020-05-15 00:39:13 · 176 阅读 · 0 评论 -
C++ list容器
一、List优点:对任意位置进行快速的插入和删除,采用动态内存分配,不会造成内存浪费和溢出。缺点:容器遍历速度慢,占用空间比数组大。特点:插入和删除不会造成原有迭代器的失效。1.list的构造函数#include "pch.h"#include "string"#include <iostream>#include <list>using namespace std;void printList(const list<int>&L)原创 2020-05-12 00:08:31 · 156 阅读 · 0 评论 -
C++ 常量指针与指针常量
int main(){ int a = 5; int b = 6; //常量指针 const int *p = &a;//也可写成int const *p=&a; *p = 45; //错误,指针指向的值不可以修改,指针的指向可以修改 p = &b; //正确 //指针常量 int * const p1 = &a; *p1 = 10; ...原创 2020-05-01 01:34:12 · 235 阅读 · 1 评论 -
C++ 结构体
一、结构体指针#include "string.h"#include <iostream>using namespace std;struct Student{ string name; int age; int score;};int main(){ Student s = {"张三",16,100}; Student *p = &s; cou...原创 2020-04-24 03:04:47 · 396 阅读 · 0 评论 -
C++ 二叉树的遍历
利用递归和非递归方式实现二叉树的遍历#include "iostream"using namespace std;typedef struct treeNode{ char data; struct treeNode *Lchild; struct treeNode *Rchild;}TREE,*LPTREE;LPTREE createNode(char data){ ...原创 2020-02-27 22:19:14 · 298 阅读 · 0 评论 -
C++中的深拷贝与浅拷贝
#include "iostream"using namespace std;class Person{public: Person() { cout << "默认构造函数" << endl; } Person(int age,int height) { m_Age = age; m_Height=new int(height); cou...原创 2020-02-19 04:10:57 · 289 阅读 · 0 评论 -
C++ 拷贝构造函数的调用时机
C++ 拷贝构造函数在下面三种情况下调用:(1)使用一个已经创建的对象来初始化一个对象(2)用值传递的方式给函数参数传值(3)值方式返回局部对象(1)使用一个已经创建的对象来初始化一个对象#include "iostream"using namespace std;class Person{public: Person() { cout <<...原创 2020-02-10 02:01:16 · 293 阅读 · 0 评论 -
C++ 酒店管理系统
主要功能:1.添加员工信息2.显示员工信息3.删除员工信息4.修改员工信息5.查找员工信息6.员工信息排序7.清空数据(1)显示数据(2)修改数据(3)查找数据(4)信息排序部分代码展示:workerManager.cpp。需要完整代码可以留邮箱,有时间就发#include "stdafx.h"#include "work...原创 2020-01-02 06:26:39 · 7760 阅读 · 110 评论 -
C++中调用C语言代码
test.h#pragma once//C++ 运行该文件时,extern C包含的内容用C语言方式连接#ifdef __cplusplus extern "C"{#endif #include <stdio.h>void show();#ifdef __cplusplus}#endif test.c#include "test.h"voi...原创 2020-01-01 16:21:13 · 1170 阅读 · 0 评论 -
C1010:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"
解决方案(1)右击相应的.cpp文件,点击“属性”(2) 在左侧配置属性中,点开“C/C++”,点击“预编译头”(3)更改右侧的“预编译头”,把选项从“使用(/Yu)”改成“不使用预编译头”。...原创 2020-01-01 15:57:03 · 378 阅读 · 0 评论 -
C++ 继承的范例
定义一个学生类作为父类,本科生类作为子类,继承学生类。studnet.husing namespace std;class student{public: student(const char *n, int a); //带参数的构造函数 student(); //不带参数的构造函数 void set(const char *n, int a);...原创 2019-06-21 16:08:57 · 426 阅读 · 0 评论 -
vs2017 运行卡的一种解决方案
删除项目文件中的.vs文件。原创 2019-06-12 11:55:44 · 7600 阅读 · 0 评论 -
2018年3月 CCF真题2 碰撞的小球
问题描述: 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处。有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒。当小球到达线段的端点(左端点或右端点)的时候,会立即向相反的方向移动,速度大小仍然为原来大小。当两个小球撞到一起的时候,两个小球会分别向与自己原来移动的方向相反的方向,以原来的速度大小继续移动...原创 2019-06-01 13:07:20 · 348 阅读 · 0 评论 -
2018年3月 CCF真题1 跳一跳
问题描述: 近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。 简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。 如果跳到了方块上,但没有跳到方块的中心则获得1分;跳到方块中心时,若上一次的得分为1分或这是本局游戏的第一次跳 跃则此次得分为2分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将+2,+4,+6,...原创 2019-05-28 15:51:23 · 1023 阅读 · 0 评论 -
区域紧密度检测 opencv
紧密度=轮廓面积/最小外接矩形面积#include "iostream";#include "opencv.hpp"using namespace std;using namespace cv;//紧密度int main(){ Mat grayImage, dstImage, resultImage; Mat Image = imread("1.png"); res...原创 2019-05-21 20:50:04 · 1242 阅读 · 1 评论 -
面积因子与细长度去除障碍物
#include "opencv.hpp"#include "iostream"using namespace std;using namespace cv;int main(){ Mat srcImage, grayImage, dstImage,imgHSVMask,resultImage; Mat img = imread("Road1.png"); resultImag...原创 2019-05-21 20:34:33 · 263 阅读 · 0 评论 -
opencv 获取最小外接矩形
#include "iostream";#include "opencv.hpp"using namespace std;using namespace cv;int main(){ Mat grayImage, dstImage, resultImage; Mat Image = imread("test.png"); resultImage = Image.clone();...原创 2019-05-19 16:21:31 · 6429 阅读 · 1 评论 -
opencv 去除小面积区域
功能:#include "opencv.hpp"#include "iostream"using namespace std;using namespace cv;int main(){ Mat srcImage, grayImage, dstImage,imgHSVMask; int size = 800; //面积因子 //srcImage = im...原创 2019-05-19 14:54:21 · 7168 阅读 · 1 评论 -
C++ 面向对象基础案例
#include "iostream"#include "string"using namespace std;class birthday {public: birthday(); birthday(int y, int m, int d); void set(int y, int m, int d); vo...原创 2019-05-14 15:01:47 · 514 阅读 · 0 评论 -
vs2017出现“warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符”的解决方法
vs2017运行程序时出现如下警告:解决方法:在属性页中选择“C/C++”——“高级”——“禁用特点警告”,在里面输入“4819”,然后应用即可。再次运行程序,警告消失。...原创 2019-05-09 17:45:57 · 3065 阅读 · 1 评论 -
opencv 提取彩色图像轮廓
本程序功能:提取彩色3通道图像的轮廓#include <opencv.hpp> #include <iostream> #include <vector> using namespace cv;using namespace std;int main(){ Mat dstImage = imread("1.png"); n...原创 2019-04-29 16:50:00 · 4078 阅读 · 0 评论 -
opencv 提取单通道图像轮廓
程序功能:提取单通道图像轮廓#include <opencv.hpp> #include <iostream> #include <vector> using namespace cv;using namespace std;int main(){ Mat SrcImage = imread("1.png"); Mat g...原创 2019-04-29 09:30:04 · 1360 阅读 · 0 评论 -
C++ 链表的基本操作
本文介绍C++中链表的基本操作,包括:链表的创建、显示、查询、插入、删除。#include "stdafx.h"#include "iostream";using namespace std;struct node{ char data; node *next;};node *Create(); //创建链表的函数,返回表头void Showlist(node *h...原创 2019-03-08 16:51:02 · 873 阅读 · 1 评论 -
C++ 结构类型
C++中有一种数据类型称为结构类型,它允许用户自己定义一种数据结构,并且把描述该类的各种数据类型整合到其中。一、结构类型的基本使用#include "stdafx.h"#include "iostream";using namespace std;struct student{ int idNumber; char name[10]; int age; float gpa...原创 2019-02-25 21:08:29 · 3460 阅读 · 0 评论 -
C++ 指针的应用
一、指针与数组首先看一段程序,来了解数组名与指针之间的用法。#include "opencv.hpp"using namespace std;using namespace cv;int main(){ int a[3] = { 1,3,4 }; int *aptr = a; for (int i = 0; i < 3; i++) { cout <<...原创 2019-02-23 21:22:48 · 225 阅读 · 0 评论 -
C++ 引用
在C++中,变量使用了引用之后,对引用的操作就如同对被引用变量的操作了。这就好像叫一个人的绰号和叫一个人的本名有同样的效果。 引用的格式为:变量数据类型 &引用名=已声明的变量 引用最有用的地方用于函数中传递参数,我们可以用一个简单的例子来说明。#include "opencv.hpp"using namespace std;usin...原创 2019-02-22 20:18:00 · 139 阅读 · 0 评论 -
将动态二维数组数据存入一维数组,并排列
在图像处理中,有时需要将每个像素点对应的一些数据做排序处理,然后进行下一步工作。这时,就需要将每个像素点对应的值存入二维数组,然后将二维数组中的数据存入一维数组,最后做排序处理。 下列程序中:首先创建一个4*4的图像,定义和图像尺寸大小一样二维数组,然后给每个像素点赋值,接着将数据存入一维数组,最后排序。#include <opencv2/opencv....原创 2019-01-10 17:29:53 · 3197 阅读 · 0 评论 -
opencv 创建图片
实验中需要创建一些测试图片来测试,所以下面介绍快速创建图片的方法:#include "opencv.hpp"using namespace std;using namespace cv;int main(){ Mat image(200,150,CV_8UC1); //创建一个高200,宽100的灰度图 for (int i = 0; i < image.rows; i+...原创 2019-01-02 16:02:55 · 6544 阅读 · 0 评论 -
opencv Rect函数裁剪图片
Rect函数参数列表如下:Rect(int _x,int _y,int _width,int _height);int_x和int_y: 代表左上角点的坐标。int_width和int_height:代表需要裁剪区域的尺寸 。#include "opencv.hpp"using namespace std;using namespace cv;int main(){ M...原创 2019-01-02 15:48:18 · 21130 阅读 · 4 评论