- 博客(53)
- 收藏
- 关注
原创 glog日志中多了: No such file or directory [2]
只能追踪glog源码,发现是因为检查了errno宏返回的错误日志。而我的应用中导致errno返回错误代码2的原因是使用std::ifstream访问了不存在的文件。所以其实是因为我使用了PLOG宏导致检查了errno,正常使用LOG宏就不会有这个问题,而我使用PLOG的原因是LOG宏与另外一个库自带的日志宏LOG冲突。Glog 提供了一个宏 PLOG 和 LOG_IF,它们会自动检查 errno 并记录错误信息。如果你不希望 Glog 检查。errno,可以避免使用这些宏,改用普通的 LOG 宏。
2025-02-11 10:51:10
130
原创 vcpkg安装g2o,提示找不到cs.h,debug模式运行提示找不到libcxsparse.dll
我这边直接使用RelWithDebug模式,使用release版本的动态库,即可正常运行。在VS中双击错误提示,定位到csparse_extension.h文件,将。
2024-06-22 19:03:43
292
原创 osg执行opengl4.3的shader报错
问题原因:经过分析,是因为矩阵MVP在客户端CPU里面是double类型,在服务端GPU里是float类型导致。运行案例:运行这篇博客的opengl4.3的例子,
2024-03-18 11:55:16
857
原创 使用vcpkg交叉编译opensplat报错
进行了多种尝试,最后发现是因为libtorch的cmake文件夹下定义了一部分protobuf的cmake文件,和vcpkg内的protobuf冲突。
2024-03-15 23:11:59
556
原创 OSG vcpkg安装 read error (Could not find plugin to read objects from file
osg vcpkg 加载网格文件失败
2023-12-15 15:56:05
1087
1
原创 关于虚函数、父类指针、父类子类内存访问的一道很有意思的笔试题
1. 题目1.1 原题#include<iostream>using namespace std;class A{public: A() { a = 5; } virtual void fun(x) { a += x; } void fun2(x) { a -= x; } int a;};class B: public A{ B() { a = 10; }...
2020-01-17 11:28:19
342
原创 C++限制对象只能在堆上生成
1 限制对象只能在堆上生成贴代码:#include<iostream>using namespace std;class Demo{public: Demo(int x) { this -> x = x; } //外部不能访问析构函数,因此需要在内部打开一个缺口,访问析构函数 //delete是先执行析构函数,然后释放内存 void destroy(...
2019-05-21 10:05:57
328
原创 C++ 限制类的实例个数
引自《More Effective C++》,其实与设计模式里的单利模式比较类似,但也有不同。相同点:都能够限制类生产对象的个数。不同点:《More Effective C++》限制对象个数可以限制为任意个,可以实现删除与增加,而且扩展了基类;设计模式里单利模式对象始终为那一个,生成了就会生存到整个程序运行完毕,中间占据的始终是那一块内存。1 不使用基类,限制类的实例个数先贴代码:#in...
2019-05-20 19:55:21
781
原创 C++ 函数参数传递与对象返回探究
1 函数参数对象值传递:#include<iostream>using namespace std;class Demo{public: int x; Demo(int x) { this->x = x; }};Demo operator+(Demo a,Demo b){ cout << "operator内a、b地址:" <&l...
2019-05-17 16:38:03
228
原创 C++ 函数指针
#include<iostream>using namespace std;typedef int(*PF)(int, int);int add(int a, int b){ return a + b;}int sub(int a, int b){ return a - b;}int main(){ PF pf; pf = add; cout &l...
2019-05-17 10:20:35
126
原创 C++ 异常捕获与普通函数的对象传递区别
引用自:《More Effective C++》第一、异常对象在传递时总被进行拷贝;当通过传值方式捕获时,异常对象被拷贝了两次。对象做为参数传递给函数时不一定需要被拷贝。注:异常对象抛出时一定会进行一次拷贝,捕获时使用引用传递就不需要拷贝了。作为参数被传递给函数时,函数处可能是引用参数,就不需要复制对象。第二、对象做为异常被抛出与做为参数传递给函数相比,前者类型转换比后者要少(前者只有两种转...
2019-05-16 17:16:49
223
原创 C++ shared_ptr
为了解决内存泄漏问题,C++标准库内包含了智能指针,shared_ptr是其中的一种。#include<iostream>#include<memory>using namespace std;int main(){ int *pa = new int(1); shared_ptr<int> sp = make_shared<int>...
2019-05-16 11:09:28
689
原创 C++ 重载operator new,delete
new operator 与operator new不是一个概念,new operator作为一个操作符,就是我们常用的new:Test* ptest = new Test(2);operator new实质上是一个用来获取内存的函数,实质上调用了mallocvoid* operator new(size_t size);new operator实质上是调用了“operator new...
2019-05-15 21:21:51
646
原创 C++ 自加运算符重载
顺便学习使用“<<”与“>>”的重载#include<iostream>using namespace std;class C{ //重载“<<”与“>>”,作为全局函数,作为类的友元,访问类的私有成员变量 friend ostream & operator <<(ostream&out, C&a...
2019-05-14 20:29:23
653
原创 C++复制构造函数与等号重载
本文考虑的深复制#include<iostream>using namespace std;class C{private: int * pa; int b;public: C(int a = 0, int b = 0) { pa = new int(a); this->b = b; } void print() { cout <&l...
2019-05-14 10:19:38
1063
原创 C++ 实现神经BP神经网络
BP.h#pragma once#include<vector>#include<stdlib.h>#include<time.h>#include<cmath>#include<iostream>using std::vector;using std::exp;using std::cout;using std::e...
2019-05-11 10:22:37
578
原创 C++ 二维数组vector如何添加空行
在制作BP神经网络时,需要给vector添加一个空行,自己根据直觉进行了以下试探,发现并没有问题。#include<iostream>#include<vector>using namespace std;int main(){ vector<vector<int>> vv; vv.push_back({}); vv.push_ba...
2019-04-30 21:09:06
2752
1
原创 C++ 利用vector实现 行非等长 的二维数组
最近在学习BP神经网络,每一层的节点数可能不一样,但是想把所有节点都置于一个数组里,网上没找到理想的解决方案,就自己试了一下,发现vector天然支持每一行元素数目不等。贴代码:#include<iostream>#include<vector>using namespace std;int main(){ vector<vector<int&g...
2019-04-28 11:21:18
1766
原创 C++ 建造者模式(Builder)
最近在学设计模式,对于建造者模式找了大量的资料,最后看到这篇文章写得比较通俗易懂(建造者模式及C++实现),本文在这篇文章的基础上进行学习。1 核心建造者模式适合于产品各个模块内建造过程多变,而各个模块相对的建造顺序稳定的情况。建造者模式的类图如下:2 具体实现2.1 产品product产品拥有三个参数para,有三个方法分别进行设置set,还有一个展示参数的方法show。Prod...
2019-04-18 18:18:01
535
1
原创 C++拷贝构造函数与赋值符重载
如果没有明确写出赋值符重载函数与拷贝构造函数,编译器会默认生成。#include<iostream>using namespace std;class Demo{private: int _a = 0; int _b = 0;public: Demo(int a, int b):_a(a), _b(b) {} void print() { cout <&...
2019-03-28 17:09:28
301
转载 C++ 线程之哲学家就餐问题
转自:C++标准线程库之哲学家就餐问题#include <iostream>#include <exception>#include <mutex>#include <vector>#include <string>#include <algorithm>#include <functional>#...
2019-03-28 16:49:36
1072
原创 C++ lambda表达式
以下代码主要提及Lambda表达式的三个方面:1 Lambda表达式的标准格式;2 外部变量值捕获与引用捕获的区别;3 返回值设置#include<iostream>using namespace std;int main(){ int a = 1, b = 1; //最普通的表达式 auto f1 = [] () {return 5; }; cout <...
2019-03-28 13:08:58
123
转载 C++ 多线程编程
转自:C++标准线程库之共享资源1 带普通互斥锁的多线程案例#include<iostream>#include<thread>#include<mutex>using namespace std;class X{ int* _p; mutex m1;public: X(int* p = nullptr) :_p(p) {} ~X() ...
2019-03-26 22:40:52
128
转载 计算机网络 五层模型学习
转自:计算机网络.五层协议栈模型简介最近看了慕课上北京交通大学李春艳老师的计算机网络与互联网的课,听完后觉得很多地方其实只是过了一遍,于是再网上找到了这个归纳总结,其中的思维导图做的相当的perfect,贴出来备忘,其中很多不清楚的地方以后可以在需要的时候直接按图索骥了....
2019-03-26 11:55:44
317
原创 C/C++ socket编程
转:C++ Socket 编程最近在学习C++ socket编程,看到这篇文章较好,这里使用本机作为客户端与服务器端实践一遍.使用Ubuntu18.04, codeblock环境服务器端:socket→bind→listen→(等候客户端发送连接请求) →accept→send→close#include<stdio.h>//提供printf/perror函数#includ...
2019-03-21 11:41:19
632
原创 C++ 使用最大堆实现 Top K问题
前文:C++ 实现最大堆 及 最大堆排序为寻找很多数中最小的k个数,使用堆承接前文,在MaxHeap类中添加replaceTop方法,当新元素比堆顶小时,替换堆顶元素,并且重排堆保持堆特性,该replaceTop方法为:void MaxHeap::replaceTop(int val){ if (val < a[0]) { a[0] = val; shiftDown(0)...
2019-03-17 23:22:34
1374
原创 C++ 实现最大堆 及 最大堆排序
最大堆参考资料:堆和堆排序实现一个最大堆,堆的建立可以使用数组或者一个一个添加,可以通过提取堆顶元素实现降序排序,而原位排序则可以实现升序排序,这里使用原位排序。MaxHeap.h#pragma once#include<iostream>using namespace std;class MaxHeap{private: int maxsize;//记录堆允许的最...
2019-03-17 22:56:14
1602
原创 实现各种二叉树的各种遍历
不同的二叉树具有不同的行为,可以建立二叉树的继承体系,基类包含所有二叉树的共性方法,子类除了共性方法外可以自己添加个性的新方法。Node.h(节点)#pragma once#include<iostream>#include<stdlib.h>#include<time.h>using namespace std;struct Node{ in...
2019-03-17 19:11:56
279
原创 C++ 适配器模式 加入快速排序
在Sort.h内加入:class QuickSort :public Sort{public: virtual void sortSeq(int a[], int n); void sort(int a[], int n, int left, int right);};增加Quick.cpp文件:#include"Sort.h"void QuickSort::sortSeq(i...
2019-03-12 10:48:42
150
原创 C++ 原位快速排序
参考资料很多程序语言标准库实现排序的内置算法就是快速排序,这里使用C++自己实现。#include&amp;lt;iostream&amp;gt;using namespace std;void quikSort(int a[], int n, int left, int right){ if (left &amp;lt; right) { int l = left + 1; int r = ri...
2019-03-11 20:14:58
885
1
原创 C++ 适配器模式 加入归并排序
此文承接<策略模式调用不同排序算法>,归并排序算法的函数参数量为4个,简单排序算法的参数量为2个,接口不兼容,因此采用适配器模式,适配接口。Sort.h内增加:class MergeSort :public Sort{public: virtual void sortSeq(int a[], int n); void sort(int a[], int n, int lef...
2019-03-10 23:10:28
110
原创 C++ 策略模式调用不同的排序算法
前些天学过策略模式,最近重温了几种常用的简单排序算法,想到了策略模式,就实际操练一下。Sort.h#pragma once#include&amp;amp;lt;iostream&amp;amp;gt;using namespace std;class Sort{public: virtual void sortSeq(int a[], int n) = 0;};class BobbleSort :publ...
2019-03-10 17:17:25
910
原创 C++自己的归并排序
参考资料自己改编简化版本本篇回顾简化过程,根据理解自己手敲,然后发现merge()参数其实可以不用n,即继续简化了原来版本。#include&amp;lt;iostream&amp;gt;using namespace std;template&amp;lt;typename T&amp;gt;void myMergeTwoList(T a[], int left, int right);template&amp;
2019-03-10 12:12:20
94
原创 C++ 归并排序
重温归并排序的时候,以前使用python实现过,发现对归并排序原理较为理解,但是使用C++实现时,对序号的传递不是那么得心应手,所以在网上查找到一篇实现比较简洁的归并排序(链接),本文在此基础上继续进行简化。1 第一次简化首先发现运行原代码时时出现overstack错误,也就是溢出,将最大数组改为500即可修复。其次是将merge函数的mid参数去除,简化传递参数量,修改了一下验证主函数。#...
2019-03-07 18:38:51
162
原创 C++ 插入排序
插入排序就是往有序队列里一个一个的插入数组元素。插入排序模板编程#include<iostream>using namespace std;template<typename T>void insertSort(T a[], int n){ if (n <= 1)//当数组元素个数小于2时,不需要排序。 return; T temp; for ...
2019-03-07 17:20:49
204
原创 C++ 选择排序
选择排序就是每次选择最小的放最前面,一圈下来就有序了。选择排序模板编程#include&lt;iostream&gt;using namespace std;template&lt;typename T&gt;void selectSort(T a[], int n){ T temp; for (int i = 0; i &lt; n - 1; i++) { int min...
2019-03-07 16:58:13
345
原创 C++ 冒泡排序
今晚深信服笔试,重温一下排序题,顺便充当一下以后的轮子。升序冒泡排序就是将数组从头到尾相邻数比较,大的换到后面,重复就可以得到所需排序结果。非模板编程#include&lt;iostream&gt;using namespace std;void bubbleSort(int a[], int n){ int temp; for (int i = 0; i &lt; n-1; i+...
2019-03-07 16:44:10
197
原创 C++ 单向链表模板类
模板编程方便只改变数据类型、而不改变基本操作的情况,STL基本都是基于模板进行编程,因此这里尝试修改面向int型的单向链表为模板,适用于其他类型的链表。头文件#pragma once#include&lt;iostream&gt;using namespace std;template&lt;typename T&gt;struct Node{ T value; Node* ne...
2019-03-06 18:24:03
577
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人