c++
文章平均质量分 59
酷小川
研究方向:嵌入式
展开
-
C++ 内存管理的总结与思考
一、内存区域堆、栈、自由存储区、全局变量区、常量存储区。主要谈一下堆和自由存储区的区别:自由存储区:是两个动态内存区域之一,由new/delete分配/释放。对象生存期可以小于分配存储的时间;也就是说,自由存储对象可以在不立即初始化的情况下分配内存,也可以在不立即释放内存的情况下销毁内存。在分配存储期间,但在对象的生命周期之外,可以通过void*访问和操纵存储,但不能访问、获取其地址或以其他方式操纵原型对象的非静态成员或成员函数。Heap:堆是另一个动态内存区域,由malloc/free及其原创 2021-08-03 14:03:19 · 228 阅读 · 0 评论 -
C++ map遍历删除的正确写法
map<string,int> testMap;for(auto it = testMap.begin(); it != testMap.end(); ++it){ if(it->second == xxx) { testMap.erase(it); //这里会出问题 }} 错误原因:it指针被erase之后会失效,for循环中对it操作其结果都是不可预料的,可能造成程序崩溃。修改后的正确写法如下:map<stri.原创 2021-03-18 14:47:36 · 9503 阅读 · 1 评论 -
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 · 238 阅读 · 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 · 2235 阅读 · 0 评论 -
使用nlohmann库实现json数据转为protobuf数据
使用nlohmann库实现Json数据转为protobuf数据。核心代码如下,代码细节咨询可以留言:int json2pb(const std::string& json,Message* msg){ Json j=Json::parse(json); int ret=parse_json(j,msg); //解析json std::cout<<"msg信息:"<<msg-DebugString(); return ret;}s原创 2020-07-06 10:38:48 · 686 阅读 · 0 评论 -
使用nlohmann库实现protobuf数据转为Json数据
使用nlohmann库实现protobuf数据转为Json数据。核心代码如下,代码细节咨询可以留言:Json pb2json(const Message *msg) //pb数据转json{ Json json=parse_msg(msg); //解析pb数据 return json; //返回json对象}Json parse_msg(const Message *msg) //解析pb数据{ cosnt Descriptor *d=msg->G原创 2020-07-02 17:05:34 · 856 阅读 · 0 评论 -
C++ 右值引用与左值引用
意义:可以避免无谓的复制,提高程序的性能。左值:表达式结束后依然存在的持久化对象右值:表达式结束后不再存在的临时对象所有的具名变量和对象都是左值,而右值不具名。区分左值和右值的快捷方法:看能不能对表达式取地址,如果能则是左值,否则就是右值。右值分为纯右值和将亡值。纯右值是C++98中的右值概念,如非引用函数返回的临时变量;一些运算表达式,如4+6产生的临时变量;不和对象关联的字面量值,如10,‘s’,true,“hello”等这些不能被取地址的值。将亡值:c++11中新增的和右值引原创 2020-06-18 15:25:46 · 811 阅读 · 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 · 1308 阅读 · 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 · 174 阅读 · 0 评论 -
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 · 395 阅读 · 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 · 284 阅读 · 0 评论 -
C++ 拷贝构造函数的调用时机
C++ 拷贝构造函数在下面三种情况下调用:(1)使用一个已经创建的对象来初始化一个对象(2)用值传递的方式给函数参数传值(3)值方式返回局部对象(1)使用一个已经创建的对象来初始化一个对象#include "iostream"using namespace std;class Person{public: Person() { cout <<...原创 2020-02-10 02:01:16 · 291 阅读 · 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 · 7732 阅读 · 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 · 1158 阅读 · 0 评论 -
C1010:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"
解决方案(1)右击相应的.cpp文件,点击“属性”(2) 在左侧配置属性中,点开“C/C++”,点击“预编译头”(3)更改右侧的“预编译头”,把选项从“使用(/Yu)”改成“不使用预编译头”。...原创 2020-01-01 15:57:03 · 364 阅读 · 0 评论 -
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 · 4061 阅读 · 0 评论 -
2018年3月 CCF真题1 跳一跳
问题描述: 近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。 简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。 如果跳到了方块上,但没有跳到方块的中心则获得1分;跳到方块中心时,若上一次的得分为1分或这是本局游戏的第一次跳 跃则此次得分为2分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将+2,+4,+6,...原创 2019-05-28 15:51:23 · 1020 阅读 · 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 · 1238 阅读 · 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 · 261 阅读 · 0 评论 -
vs2017出现“warning: C4819: 该文件包含不能在当前代码页(936)中表示的字符”的解决方法
vs2017运行程序时出现如下警告:解决方法:在属性页中选择“C/C++”——“高级”——“禁用特点警告”,在里面输入“4819”,然后应用即可。再次运行程序,警告消失。...原创 2019-05-09 17:45:57 · 3058 阅读 · 1 评论 -
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 · 6407 阅读 · 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 · 7146 阅读 · 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 · 511 阅读 · 0 评论 -
2018年3月 CCF真题2 碰撞的小球
问题描述: 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处。有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒。当小球到达线段的端点(左端点或右端点)的时候,会立即向相反的方向移动,速度大小仍然为原来大小。当两个小球撞到一起的时候,两个小球会分别向与自己原来移动的方向相反的方向,以原来的速度大小继续移动...原创 2019-06-01 13:07:20 · 346 阅读 · 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 · 422 阅读 · 0 评论 -
vs2017 运行卡的一种解决方案
删除项目文件中的.vs文件。原创 2019-06-12 11:55:44 · 7577 阅读 · 0 评论 -
C++字符串匹配(一):BF算法
算法原理: BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。下面是C++的算法实现过程:#include "iostream"原创 2017-09-19 23:15:14 · 6916 阅读 · 2 评论 -
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
class Solution {public: vector<int> printListFromTailToHead(ListNode* head) { vector<int> res; while (head) { res.push_back(head->val); head = head->next; } ...原创 2019-09-28 13:42:47 · 381 阅读 · 0 评论 -
将棋盘上的棋子变成一行,计算最小步数。
题目:棋盘上分布着n个棋子,棋子的坐标为(x,y)。将各个棋子变成一行,相同的点只能放一个棋子。计算将这些棋子变成一行,棋子每步可以上下左右移动一格,计算最少需要多少步。输入:第一输入n,表示棋子的数量。接下来的n行输入棋子的坐标。示例1:输入:31 02 43 2输出:4示例2输入:31 51 61 1输出:8#inc...原创 2019-09-25 23:18:20 · 632 阅读 · 0 评论 -
C++ string
#include <iostream>#include <string>#include <vector>using namespace std;const int N = 10000;int main(){ string a="abcde"; string b = "fgnbayok"; a.swap(b); //交换2个string对象的...原创 2019-09-22 15:58:18 · 226 阅读 · 0 评论 -
将字符串分成多个字符串输出
substr函数:截取字符串中的部分字符串。string substr(int n = 0, int m = string::npos) const; //起点为n,长度为m。调用时,如果省略 m 或 m 超过了字符串的长度,则求出来的子串就是从下标 n 开始一直到字符串结束的部分。下面代码功能:输入一个字符串,当出现“,”时,形成新的短字符串。如输入:few,tew,rwe...原创 2019-09-22 15:42:44 · 3934 阅读 · 0 评论 -
C++ 输入带空格的字符串
(1)string#include "pch.h"#include <iostream>#include <string>using namespace std;int main(){ string a; getline(cin,a); cout << a; return 0;}(2)char 字符串#include &...原创 2019-09-21 20:56:21 · 389 阅读 · 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 · 1356 阅读 · 0 评论 -
opencv中应用step访问图像像素
#include "stdafx.h"#include "opencv.hpp"using namespace std;using namespace cv;int main(){ Mat grayImage, dstImage; Mat Image = imread("1.png"); imshow("原图", Image); cvtColor(Image, grayIma...原创 2019-03-06 15:36:31 · 1948 阅读 · 1 评论 -
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 · 870 阅读 · 1 评论 -
C++ 产生0-1之间的随机数
C++中用来产生随机数的函数为rand(),其返回值为整数。要产生0-1之间的浮点数,必须经过转换才能得到。思路:生成一个0-N的随机数,然后对其处以N+1,则可以得到浮点型随机数。N可以确定产生的精度。比如需要2位小数,则N=99,需要3位小数,则N=999。代码如下:#include "stdafx.h"#include "iostream"#include "ctime"#includ...原创 2018-06-07 17:14:24 · 58126 阅读 · 5 评论 -
C++ 输出数据的精度控制
介绍C++中基础的输出数据精度控制方法:#include "stdafx.h"#include "iostream"#include "iomanip"using namespace std;int main(){ double doubleNum = 10.0 / 3.0; cout << "默认显示:"<<doubleNum*1000000 &l原创 2018-05-30 17:13:59 · 3633 阅读 · 0 评论 -
运行PCL代码出现C2988,C2143,C2913等错误的解决方法
参考网上教程,在vs2017(windows10)上配置PCL后,运行PCL官方示例代码:#include "stdafx.h"#include <iostream> #include <string> #include <pcl/io/ply_io.h> #include <pcl/point_types.h> #include...原创 2018-05-22 11:48:19 · 3014 阅读 · 5 评论 -
ICP算法的原理与实现
一、背景与意义 点云数据能够以较小的存储成本获得物体准确的拓扑结构和几何结构,因而获得越来越广泛的关注。在实际的采集过程中,因为被测物体尺寸过大,物体表面被遮挡或者三维扫描设备的扫描角度等因素,单次的扫描往往得不到物体完整的几何信息。因此,为了获得被测物体的完整几何信息,就需要将不同视角即不同参考坐标下的两组或者多组点云统一到统一坐标系下,进行点云的配准。在配准算法中,研究者使用最...原创 2018-05-11 16:06:06 · 79137 阅读 · 19 评论 -
二维Otsu算法的原理与实现
1.简介: 一维Otsu算法有计算简洁、稳定、自适应强等优点,被广泛用于图像分割中。但一维Otsu算法没有考虑图像像素点之间的关系,当图像中有噪声时,会导致分割的效果不理想。因此,刘健庄等人在1993年提出了二维的Otsu算法,提升了算法的抗噪声能力。2.算法思想: 同时考虑像素的灰度值分布和它们邻域像素的平均灰度值分布,因此形成的阈值是一个二维矢量,最佳的阈值在一个二维的...原创 2017-10-23 18:43:06 · 19192 阅读 · 9 评论