C++
jiafuLi2018
这个作者很懒,什么都没留下…
展开
-
GRPC 客户端释放channel资源失败或者卡死的解决方案
当我们创建一个全局的对象时,或者静态对象是,或者智能指针,并期望系统在进程退出的时候自动回收申请的内存。但不幸的是,系统回收资源无法按我们期望的顺序,这就会造成GRPC依赖的某些资源已经释放,而我们自己申请的GRPC的资源有在等待这些资源,造成进程无法结束或者卡死的问题。那为了解决资源无法释放的问题,就需要主动释放这些自己申请的内存,也就是在进程结束前,主动执行资源释放操作,因此可以使用 atexit() 主动释放自己申请的内存,或者一些全局的变量,以保证自己申请的内存自己释放,达到精确控制内存的目的。原创 2022-08-22 17:24:03 · 1577 阅读 · 1 评论 -
C++ 获取系统时间戳
//version 1: no time zonestd::string getTimeStamp(){ char fmt[64] = ""; char timestampBuf[128] = ""; struct timeval tv; struct tm tm; gettimeofday(&tv, NULL); localtime_r(&tv.tv_sec, &tm); // thread safe strftime(fmt, sizeof(.原创 2021-09-27 15:46:15 · 4218 阅读 · 0 评论 -
在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。
转载别人的,供自己学习【组合数学+动态规划】在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。在如下8*6的矩阵中,请计算从A移动到B一共有__种走法。要求每次只能向上或向右移动一格,并且不能经过P。 A:456 B:492 C:568 D:626 E:680 F:702解析:转载 2017-05-26 11:01:50 · 2615 阅读 · 0 评论 -
什么是面向对象的编程思想?
面向对象的编程产生的历史原因:由于面向过程编程在构造系统时,无法解决重用,维护,扩展的问题,而且逻辑过于复杂,代码晦涩难懂,因此,人们开始想能不能让计算机直接模拟现实的环境,以人类解决问题的方法,思路,习惯和步骤来设计相应的应用程序。于是,面向对象的编程思想就产生了。面向对象的编程的主要思想是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在原创 2017-05-16 09:44:11 · 22244 阅读 · 0 评论 -
关键字static的作用
静态变量属于静态存储方式,其存储空间为内存中的静态数据区。该区域中的数据在整个程序的运行期间一直占用这些存储空间(在程序整个运行期间都不释放),直到整个程序运行结束,而auto自动变量,即动态局部变量,属于动态存储类别,占动态存储空间,函数调用结束后即释放。static作用可以总结如下几点:1.函数听日static变量的作用范围为函数体内,不同于auto变量,该变量的内存只被分配一次,因此原创 2017-05-06 10:23:05 · 2049 阅读 · 0 评论 -
二叉树先序遍历(包含递归和非递归(2种方法))
二叉树先序遍历:中 左 右二叉树中序遍历: 左 中 右二叉树后序遍历: 左 右 中本文以二叉树的先序遍历为例,讲解递归和非递归两种方法求解。首先给出二叉树节点的结构struct Node {int value;Node left;Node right;Node(int x) {this.value = x;}};例:二叉树如图所示1原创 2017-05-04 21:40:55 · 1611 阅读 · 0 评论 -
string 类成员函数c_str
c_str() 是string 类的成员函数:const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同c_str()就是把string类对象转换成和c兼容的char *类型。这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符原创 2017-03-06 15:38:08 · 446 阅读 · 0 评论 -
C++ bitset类的使用与简介
/* 今天做编程题的时候遇到char转二进制的情况,于是在网上搜到了bitset类模版,里边的方法做够用来编写简洁高效的代码,因此将此收藏,以备后用!原文转载自:http://blog.163.com/lixiangqiu_9202/blog/static/53575037201251121331412/这篇文章介绍的很详细,值得一看,故分享传播于此。*/有些程序要处理转载 2017-02-26 13:43:21 · 374 阅读 · 0 评论 -
相比于vector,数组有哪些缺点
数组和vector一样可以存放任意对象,除了引用,即不存在引用的数组,也不存在引用的vector。相比vector 数组的缺点有以下几个方面:1. 数组的维度必须是常量表达式,即在初始化是必须给出。整个程序的运行过程中也不会改变。2. 数组不允许拷贝和赋值,即不能将数组的内容拷贝到其他数组作为其初始值,但是vector可以。3. 数组使用的过程,容易产生数组越界,而相对于vec原创 2016-12-29 21:02:31 · 3039 阅读 · 0 评论 -
学习笔记之C++为什么将函数声明或者类的定义放在.h文件中,而将其实现放在原文件中
根据C++ Primer所述当编译器遇到模版定义时,它并不生成代码,而是当我们实例化出模版的特例的时候,编译器才会生成代码。通常我们调用一个函数时,编译器只要知道函数的声明,对与类类型的对象时,类的定义必须在头文件中,而成员函数定义和普通函数的定义可以放在源文件中。原创 2016-11-22 16:39:50 · 1249 阅读 · 0 评论 -
学习笔记之类的数据成员指针和函数指针
1.数据成员指针成员指针访问运算符 ,通过对象(. * )或指针( -- >* )获取成员获取数据成员的两种方式: auto p=&类名::数据成员名;//得到指向数据成员的指针,然后 auto data=类的对象. *p; 得到类的成员;此方法必须声明为类的友元或者是类的成员 在类的成员函数里边返回类的数据成员的指针,通过调用成员函数得到数原创 2016-12-02 21:56:23 · 336 阅读 · 0 评论 -
学习笔记之C++ 输出代码的几种形式
C++ 输出代码的几种形式: 1.使用for 循环输出2.使用for_each +lambda 输出for_each( str.begin(), str.end(), [](const string& s1) {coutlambda 表达式[](const string& s1) {cout3.使用 范围for输出for原创 2016-12-01 21:58:50 · 1315 阅读 · 0 评论 -
学习笔记之智能指针shared_ptr
智能指针都定义在 memory 头文件中程序使用的三种内存静态内存----存放------局部,全局static变量,以及全局变量栈内存------存放-------局部非static变量,函数内部变量堆内存(自由空间)-----动态分配的对象----------------内存池shared_ptr 允许多个指针指向同一个对象shared_原创 2016-12-01 21:54:42 · 497 阅读 · 0 评论 -
virtual 函数的public继承的 的一点问题及理解
当使用派生类对象生成基类指针,使用基类指针调用 virtual 方法时,假设 virtual 方法的参数是有默认初始值的。通过本实例发现,基类指针指向了派生类(derived class),按照常规来说应该是调用派生类的set(int x) 方法,但是在缺省参数时,情况确实很诡异,首先基类指针调用派生类的方法是,如果缺省参数,则使用基类的默认初始化值,而不管派生类有没有默认初始化,然后再原创 2016-11-13 15:34:01 · 830 阅读 · 1 评论 -
STL中swap的简单使用及总结
STL中swap操作交换两个相同类型容器的内容,两个容器的元素将会将换。需要注意的是相同的容器类型和相同的元素类型。下边以具体实例说明:1.相同的容器类型相同的元素类型结果如图所示,str1和str2交换了元素。但是可以发现指向容器的迭代器并没有指向交换后的元素,而是依然指向原先的元素,这是因为swap并没有交换元素本身,而是只交换了两个容器的内部数据结构。所以迭代原创 2016-11-09 19:45:32 · 5106 阅读 · 0 评论 -
学习笔记之指针和引用的区别
听很多学长学姐说面试的时候容易问到的一个问题是:指针与引用的区别?以前认为没什么区别,今天仔细上网搜了下,总结如下:1.指针是一个地址,传指针可以实现对指针所指向变量的修改,当然此处考虑的是非const的情况。2.引用是所引用变量的一个别名,引用与变量名绑在一起,所以引用必须初始化,且在其整个生命周期内不能改变其所引用的变量,指针却不这样。3.传递指针本质上是值传递,指针内容是所指原创 2016-11-07 21:37:15 · 345 阅读 · 0 评论