- 博客(60)
- 资源 (1)
- 收藏
- 关注
原创 weakptr-void sharedptr-void知多少及智能指针的类型转换
void*裸指针的使用及转换我们知道,在使用裸指针时,对于那些不确定的类型指针,我们可以用void*来进行指向.真正知道了类型之后,需要进行转换.具体的转换方式有:static_cast<T*>const_cast<T*>reinterpret_cast<T*>dynamic_cast<T*>static_cast:显式转换,只要你知道要转换的类型,且不包含底层const都可以使用.这也是最常用的一个转换: double d = 2;
2020-05-30 00:59:49
1864
1
原创 POLLHUP vs POLLNVAL vs EPOLLHUP
POLLNVALPOLLNVALis equivalent to EBADF: it means the file descriptor does not actually refer to any open file, i.e. it was closed or never open to begin with. This can never happen except as a result of a programming error or intentional attempt to query
2020-05-26 10:08:56
1115
原创 pthread_join(),pthread_exit(),pthread_detach()
简介pthread有两种状态joinable状态(属性)和unjoinable状态,如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符。只有当你调用了pthread_join之后这些资源才会被释放。若是unjoinable状态的线程,这些资源在线程函数退出时或pthread_exit时自动会被释放。unjoinable属性可以在pthread_create时指定,或在线程创建后在线程中pthread_detach自己, 如:pthr
2020-05-22 14:21:26
932
转载 Keras的自定义lambda层去reshape tensor张量时model保存出错的解决办法
背景 分割网络在进行上采样的时候我用的是双线性插值上采样的,而Keras里面并没有实现双线性插值的函数,所以要自己调用tensorflow里面的tf.image.resize_bilinear()函数来进行resize,如果直接用tf.image.resize_bilinear()函数对Keras张量进行resize的话,会报出...
2020-01-12 12:02:11
740
1
原创 使用GDB进行多线程调试的基本常用命令
1. 线程的查看首先创建两个线程:#include <stdio.h>#include <unistd.h>#include <pthread.h>#include <stdlib.h>#include <string.h>void* pthread_run1(void* arg){ (void)arg; ...
2019-12-30 12:13:39
283
原创 海量数据处理算法—Bit-Map---面试题集锦
Bitmap算法简介:https://blog.youkuaiyun.com/hguisu/article/details/7880288面试题集锦:https://blog.youkuaiyun.com/v_july_v/article/details/6685962
2019-08-14 21:55:21
295
原创 java中的接口与C++的多继承
JAVA接口含义https://www.runoob.com/java/java-interfaces.htmlJava中接口的作用问题: 例如我定义了一个接口,但是我在继承这个接口的类中还要写接口的实现方法,那我不如直接就在这个类中写实现方法岂不是更便捷,还省去了定义接口?解答:接口就是个招牌。比如说你今年放假出去杭州旅游,玩了一上午,你也有点饿了,突然看到前面有个店子,上面挂着KFC...
2019-08-12 17:59:23
522
原创 宏定义函数-普通函数-内联函数区别
宏定义函数VS普通函数VS内联函数宏定义函数VS普通函数宏定义函数要点:变量都用括号括起来,防止出错,结尾不需要;。在实际编程中,不推荐把复杂的函数使用宏,不容易调试。多行用\例子:单行:#define MAX(a, b) ((a) > (b) ? (a):(b))多行:#define MALLOC(n, type) \((type *) malloc((n)*...
2019-07-04 13:59:32
680
原创 CString,string,char*转换
CString,string,char*转换首先假设这里CString是CStringA,之后再讨论CStringW的转换.string=> CStringstring str;CString cstr;cstr.format("%s",str.c_str());CString=> stringCString cstr;string str(cstr.GetB...
2019-06-19 13:41:19
317
原创 函数对象和函数指针
函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址。用途:用作调用函数和做函数的参数。声明方法:数据类型标志符 (指针变量名) (形参列表)int (*func) (int x); 这里的(*func)不能去掉括号,去掉括号就是返回值为int指针的函数声明。一般用typedef:typedef i...
2019-06-16 22:08:16
1919
1
原创 可变形参的函数
可变形参的函数总共有三种方式:initializer_list (c++11)省略符形参可变参数模板 (c++11)initializer_list这种只适用于全部实参类型相同,我们可用initializer_list类型的形参.注意initializer_list也是模板类型,但与vector不同的是,initializer_list中的元素值永远是常量值,我们无法去改变它的元...
2019-06-16 22:06:30
286
原创 同步-异步-阻塞-非阻塞全面解析
阻塞/非阻塞/同步/异步首先结论如下:对于unix来说:阻塞式I/O(默认)非阻塞I/O(nonblock)I/O复用(select/poll/epoll)都是同步I/O,因为它们在数据由内核空间复制回进程缓冲区时都是阻塞的(不能干别的事)。AIO异步I/O模型它是异步I/O,因为异步I/O是这个含义:数据准备完成由内核空间拷贝回缓冲区后 并通知进程在进程收到通知...
2019-06-05 17:28:23
229
原创 vscode配置c++环境 如何在windows上开发linux程序
VSCode(c/c++插件)配置C++环境请看官方文档足够解决大部分问题.如果您只想要一个轻量级工具来编辑C ++文件,Visual Studio Code是一个很好的选择。但是,如果您希望获得现有Visual C ++项目的最佳体验或在Windows上进行调试,建议使用Visual Studio IDE.C/C++扩展不包括C ++编译器或调试器。这里有几个编译器的选择:C...
2019-05-29 23:16:51
4105
原创 extern,extern C,头文件中可否定义变量,static,const等汇总
extern , extern “C” 作用, 该不该在头文件中定义全局变量? 以及C中的const static,C++中的static 和 const区别联系.extern首先说明extern,一般来说extern的作用是告诉编译器,我要引用别的模块定义的变量或者函数啦. 即extern xxx;只用来声明,而不定义.一般用法如下:对于extern 变量:A.c#include &...
2019-05-14 22:15:50
887
原创 strcpy的不安全之处
不安全的strcpystrcpy将src指向的以null结尾的字节字符串(包括null终止符)复制到dest指向其第一个元素的字符数组。如果dest数组不够大,则行为未定义。 如果字符串重叠,则行为未定义。 如果dest不是指向字符数组的指针,或者src不是指向以null结尾的字节字符串的指针,则行为是未定义的。strcpy,strncpy等函数都不安全.原因在于他们都不检查边界,极易造成...
2019-05-09 17:47:58
7256
3
原创 SIGINT,SIGKILL,SIGTERM信号区别,各类信号总结
SIGINT,SIGKILL,SIGTERM三者都是结束/终止进程运行.但略微有区别.SIGINT产生方式: 键盘Ctrl+C产生结果: 只对当前前台进程,和他的所在的进程组的每个进程都发送SIGINT信号,之后这些进程会执行信号处理程序再终止.SIGTERM产生方式: 和任何控制字符无关,用kill函数发送本质: 相当于shell> kill不加-9时 pid.产生结...
2019-04-16 13:43:24
34386
原创 函数调用约定(cdecl,stdcall,thiscall...等区别)
X86函数调用约定(cdecl,stdcall,fastcall,thiscall…)调用者清理堆栈的约定:在这些约定中,调用者自己清理堆栈上的参数(arguments),这样就允许了可变参数列表的实现,如printf()。cdeclcdecl(C declaration,即C声明)是源起C语言的一种调用约定,也是C语言的事实上的标准。在x86架构上,其内容包括:函数实参在线程栈上按照...
2019-04-03 17:13:55
995
原创 [C++] 分析std::iterator和std::iterator_traits
std::iterator和std::iterator_traitsstd::iteratorstd::iterator是一个模板类,其声明为: template< class Category, class T, class Distance = std::ptrdiff_t, class Pointer = T*, clas...
2018-08-20 20:39:14
4381
原创 [LeetCode] 804. Unique Morse Code Words
题目描述:a-z都有对应的莫斯密码 为: [“.-“,”-…”,”-.-.”,”-..”,”.”,”..-.”,”–.”,”….”,”..”,”.—”,”-.-“,”.-..”,”–”,”-.”,”—”,”.–.”,”–.-“,”.-.”,”…”,”-“,”..-“,”…-“,”.–”,”-..-“,”-.–”,”–..”]Example:Input: words = ["gin...
2018-05-08 21:16:26
231
原创 第一次面试成都某游戏公司时的题目
首先笔试,较为基础,其中最后有一道关于游戏开发题目总共23根火柴,人和计算机只能拿其中的1 2 3 根,谁拿到最后一根谁就输,编程实现该游戏。设计模式谈谈熟悉的一种设计模式,并用例子说明。TCP/IP协议谈谈TCP三次握手。面试问的较为底层1.浮点数类型在计算机中如何存储的 答:对于浮点数类型采用单精度float类型,和双精度类型double,...
2018-05-06 21:35:05
4500
原创 ASCII Unicode UTF-8/16的区别,及char c='汉';
从ASCII到Unicode,UTF-8作者:于洋 链接:https://www.zhihu.com/question/23374078/answer/69732605 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。ASCII很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称
2018-04-23 20:30:27
483
原创 c++ primer 类中函数调用过程解析(虚函数与作用域) P550疑问解析
函数调用过程即c++ primer 第五版中P549所谈,这里强调几点。 假定是p->mem() 或者obj.mem()首先确定静态类型,即p的类型。然后在这个静态类型中名字查找函数,即查找有没有mem。即 名字查找。若没有则去静态类型(即p的类型)的直接基类中找,仍没有继续向基类中找。直到基类顶端。仍没有的话,就返回查找失败,发生错误。若找到了,接着类型检查,如果类型匹配...
2018-03-29 21:58:35
316
原创 C++ primer 详解派生类向基类转换的可访问性
派生类向基类转换的可访问性c++ primer第五版 P5441.首先谈谈protected作为成员访问符的一个情况。对类用户不可访问。对派生类的成员和友元可以访问。最重要的一条性质 派生类的成员及友元只能通过派生类对象去访问基类的protected成员,而不能通过基类对象去访问基类的proteced成员。 即如下代码: “` class Base { public...
2018-03-28 16:39:12
489
原创 C++ primer 当vector中的push_back遇到移动构造函数会发生什么
首先仔细阅读 C++ primer 第五版 P474 Note下面的一段话意思是说当我们在类中定义了移动构造函数的时候,假设这个移动构造函数是noexcept的,类似对应StrVec类的操作,vector可能会重新分配内存,也就是说会将元素从旧空间移动到新内存中去。这个过程中就会发生移动构造函数注意 这里要注意一点,C++11规定的是移后源对象是一定要处于可析构的状态,意思是说移后源对象有可能执行
2018-03-20 21:48:04
1504
1
转载 c++中的.hpp文件
c++中的.hpp文件 hpp,其实质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该cpp文件即可,无需再 将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用 project中的cpp文件数与编译次数,也不用再发布烦人的lib与dll,因此非常适合用来编写...
2018-03-19 20:27:35
344
原创 c++ primer 13.26 指针行为的类
13.26#include #include #include #include #include "StrBlob.h"#include "StrBlobPtr.h"using namespace std;class HashPtr{public: HashPtr(const string& s = string()) :ps(new string(s)), i(0),u
2018-01-17 13:43:55
347
原创 c++ primer 13.22练习(值行为的类)
13.22#include #include #include #include using namespace std;class HashPtr{public: HashPtr(const string& s=string()) :ps(new string(s)), i(0) {} //定义值行为的拷贝构造函数 HashPtr(const HashPtr& h) :p
2018-01-17 13:41:17
368
原创 (一)将7.1.1vtk配置到MFC工程中去
毕业设计要求将CT序列图进行三维结构的重建显示,要用到VTK库,VTK和MFC进行混合编程。说实话,这个过程很烦,首先是MFC本身就是一个即将淘汰的技术,但是由于实验室要维护一套祖传的软件(已有14年的历史。。。),被强制要求使用MFC。唉,我认为IT行业如果没有更新换代的思想,只想着吃老本,是注定要被淘汰的!感慨完毕,进入正题。。。假如已有MFC工程,那么怎样将VTK配置到该工程
2018-01-08 20:58:16
1731
2
原创 c++ primer 13.3节练习(定义自己版本的swap函数并排序)
13.31#include #include #include #include #include #include "StrBlob.h"#include "StrBlobPtr.h"using namespace std;class HashPtr{ friend void swap(HashPtr&, HashPtr&);public: HashPtr(const
2017-12-06 15:33:35
561
原创 c++ primer 13.1.4节练习(合成的拷贝构造函数与自定义拷贝函数区别)
13.1.4节练习目的:Numbered类使每个对象都有唯一的标号情况1:使用合成的拷贝构造函数#include #include #include #include using namespace std;class Numbered{public: Numbered(){ mySeq = num++; }//构造函数 int mySeq; //Numbere
2017-12-04 16:27:41
640
原创 c++ primer 13.13练习(构造,拷贝,析构函数何时发生详解)
13.13理解构造函数,拷贝构造函数,析构函数何时发生,最简单的一个办法就是写一个很简单的类,观察在几个情况下是否发生。#include #include #include #include using namespace std;struct Test{ Test(){ cout << "构造函数" << endl; } Test(const Test &){ cou
2017-12-04 15:14:49
413
原创 c++ primer 12.2.2节练习(使用allocate五步走)
12.26#include #include #include using namespace std;int main(){ /**********1.定义allocator的一个allocator对象,要有类型T********/ allocator alloc; int n = 100; /**********2.allocate(n)分配n个为初始化的内存***
2017-12-03 15:57:42
449
原创 C++ primer 8.3.2节练习(有关ostringstream清空的问题)
8.13输入:电话本输出:检测后并格式化后的电话本,输出错误电话号码#include #include #include #include using namespace std;bool Valid(const string& i){ return(i.size() == 9);}string& Format(string& i){ for (auto
2017-12-01 15:33:50
636
原创 c++ primer 8.2.1节练习(读文件 写文件 fstream)
8.4#include #include #include #include using namespace std;int main(){ ifstream input("F:\\test\\input.txt");//打开文档,string中有'\'应用转义双写 vector Test{}; string temp1; if (getline(input, te
2017-12-01 13:25:28
438
原创 c++ primer 8.1.2节练习(关于流的知识)
8.1#include #include using namespace std;istream & Process(istream & i)//对于流对象,不能拷贝和赋值,必须使用引用来传递实参{ int test; while (i >> test||!i.eof()) { if (i.bad()) throw runtime_error("IO流发生不可恢
2017-12-01 13:21:24
656
原创 c++ primer 12.1.4节练习(自定义 shared_ptr的删除器)
12.14#include #include #include #include using namespace std;string destination = "目的";string connection = "连接";string Connect(string *) //获得一个连接{ cout << "获得一个连接" << endl; string temp
2017-12-01 13:17:23
358
原创 main函数的两个参数
int main(int argc , char *argv[])int main(int argc, char **argv)当我们确实要给main函数传参,执行不同的代码时,我们可以选择这种写法。argc is An integer specifying how many arguments are passed to the program from the command li
2017-11-30 20:37:48
338
原创 C++ primer第五版 7.1.3节练习
定义Sales_data的头文件#ifndef CH6_H_INCLUDED#define CH6_H_INCLUDED#include #include using namespace std;struct Sales_data{ string isbn() const { return bookNo; } Sales_data& Combine(const Sales_da
2017-10-18 20:22:39
388
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人