C++
CodingLife99
这个作者很懒,什么都没留下…
展开
-
c++数字转成字符串, 字符串转成数字
/ 将整数转换成字符串。// 将字符串转换成浮点数 fp = 15.455000。// 将字符串转换成整数 i = 15。已知从0点开始的秒数(seconds) ,计算出字符串"H:M:S", 其中H是小时, M=分钟,S=秒。与sprintf对应的是sscanf函数, 可以将字符串转换成数字。原创 2023-05-18 13:55:11 · 451 阅读 · 0 评论 -
C++指针相关梳理
而a则是指向一个变量内存区域,是可以动态改变的,a虽然没有足够的空间导致溢出(因为char a[] = “abcd”,数组的长度为5,固定下来了),但c语言不检查数组越界,依然可以写入,但是写入的内纯区域已经不受控制,说不定就覆盖了某些其它变量,是很危险的操作,出错了也很难查找原因。这么跟你说,指针本身也是一种变量,就和int型一样,假如你声明int a,其中a是变量名,有自己的一个地址,然后a的值,是另外一个地址,计算机通过变量名就能知道变量值是多少,同样的道理,你声明int。原创 2023-05-18 13:44:44 · 368 阅读 · 0 评论 -
浅谈二维数组元素的地址
一维数组元素的地址大家都比较容易理解,但对于二维数组,就很容易搞混了.今天我又被这个问题给弄糊涂了,翻了翻老谭的书本,对这个问题有了更深的认识.原创 2023-02-13 21:39:16 · 2250 阅读 · 2 评论 -
牛客网华为机试训练第3题解答: 明明的随机数
今天花了一下午才把明明的随机数这个搞明白,期间和牛客网的编译器殊死搏斗.一直发现在本地编译器运行成功,但是在牛客上的老师不能通过.整的十分的恼火和焦躁.后来看到了相同的问题,才发现解决之道.时间限制:1秒 空间限制:32768K 热度指数:222608本题知识点: 数组 算法知识视频讲解明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些原创 2023-01-16 19:52:19 · 188 阅读 · 0 评论 -
阿里巴巴2018届应届生在线编程测验记录-研发工程师C/C++
请把所有程序写在一个文件里,勿使用已禁用图形、文件、网络、系统相关的头文件和操作,如sys/stat.h , unistd.h , curl/curl.h , process.h。时间限制: 3S (C/C++以外的语言为: 5 S) 内存限制: 128M (C/C++以外的语言为: 640 M)n //这是输入整数的个数 x1 //第一个整数 x2 //第二个整数 ... xn //第n个整数。4. 从集合A和集合B当中,任意取出两个数,其差的绝对值,又构成集合D。编译器版本: gcc 4.8.4。原创 2023-01-16 19:47:20 · 478 阅读 · 1 评论 -
常见的排序操作代码(c++)
选择排序,插入排序,冒泡排序,堆排序原创 2023-01-12 21:58:39 · 289 阅读 · 0 评论 -
关于Qt中动态库(共享库)dll的疑问
Q:我记得隐式调用dll文件,需要把lib和dll都放在运行目录下(lib是引导库,起到索引的效果).但qt中我没有把.a文件放到运行目录下,只是放的dll,发现运行也是正常的.这个该怎么解释呀A:刚才问了同事,我理解有误。其实在链接过程中引导库里面的信息就写到exe里了。所以运行时就不需要把引导库拷到运行目录了。(注意链接是在运行之前,一般构建包括编译和链接)...原创 2021-09-05 16:12:17 · 195 阅读 · 0 评论 -
linux下使用QtInstallerFramework制作安装包
Linux下QtInstaller安装问题总结原创 2023-01-04 21:25:04 · 305 阅读 · 0 评论 -
对于容器类的对象,递归最好用输出参数,而非用返回值
一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。比如要获取QList变量,如果采用返回值形式,会有如下写法QList<int> Node::getNumList(){ QList<int> list1; if(当前节点有子节点) { for(遍历当前节点的下一级元素) { //1.获取子节点item //2.调用子节点的getNumList方法 list1.appe原创 2022-09-01 16:59:20 · 113 阅读 · 0 评论 -
strcpy,strncpy的使用注意
一.char *strcpy(char *dest, const char *src)参数dest-- 指向用于存储复制内容的目标数组。src-- 要复制的字符串。注意:1.dest需要分配内存,比如用数组的形式 或者 指针进行new操作.2.src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。比如dest = new char[strlen......原创 2019-11-15 13:57:00 · 608 阅读 · 0 评论 -
回调函数实现动态库调用应用程序中的方法
接口类的回调函数尽量简单(比如返回类型),一些复杂的操作可以放在实现层,比如用void callback()中去实现一些获取对象,操作对象,而不要把对象作为回调函数的返回值,导致不必要的麻烦。Q:使用回调函数来让动态库Lib获得运行程序App中的当前页方法?...原创 2022-08-31 13:33:00 · 264 阅读 · 0 评论 -
回调函数的代码示例
#include "stdio.h"typedef void (*Fun)(char *ch1, char* ch2); //函数指针类型:指向参数为(void *p, char *ch),返回值为void *的函数//外部宿主函数void GetCallBack(Fun fun)//这里是用一个外部函数来展示调用方的,此时回调函数fun是在函数里; ......原创 2020-03-11 21:51:00 · 233 阅读 · 0 评论 -
能不能在头文件中定义全局变量?(转)
①默认情况下,C语言中的全局变量和函数的作用域仅限于定义和声明这个函数或变量的文件内部,如果需要从这个C文件之外访问这些函数或者全局变量就需要使用 extern关键字进行声明,这是因为C编译器是以C文件为单位进行编译的,如果这个C文件中引用了其他文件中定义的函数或者变量,编译器将无法找到这个函数或者变量的定义,从而给出该函数或者变量未定义的错误信息。②static用于全局变量的声明时,作用类似于函数的情况,这个全局变量的作用域将局限在声明该变量的c文件内部,这个c文件之外的代码将无法访问这个变量。...原创 2019-09-12 19:39:00 · 283 阅读 · 0 评论 -
Qt智能指针易错点
Qt智能指针易错点。原创 2022-07-24 15:47:40 · 588 阅读 · 0 评论 -
对于C++中顿悟
突然对于编程有了顿悟的感觉,其实他的本质就是内存。比如静态成员函数只能够访问静态成员或者静态成员函数,为什么呢?因为静态成员函数位于代码区,静态成员位于全局区,静态成员函数去访问静态成员或者静态成员函数时能够直接找到它们,因为它们已经就在那里,不偏不倚。而非静态成员函数尽管也在代码区,但是要访问它需要知道对应的this指针,也即是需要对象实例来访问,而非静态成员是位于对象内存中,也是需要对象实例......原创 2020-02-09 15:43:00 · 88 阅读 · 1 评论 -
分清楚父类对象和子类对象的内存分配
一.背景之前一直对类内存分布和对象真正的内存分布没有清楚的理解.看到类内存分布时,子类中的变量有一部分是来自父类的,就认为在生成父类对象和子类对象时,他们共有的变量在内存上是重叠的.后来想了一下,应该不是这么回事,就实地考察了下.二.举例验证有如下的继承关系,有分别定义了对应的对象,考察不同对象的内存情况.class Base{public: int a; int ......原创 2020-05-04 22:05:00 · 810 阅读 · 0 评论 -
vector删除指定值的方法
一.删除所有满足条件的元素#include std::vector coll;…//remove all elements with value valauto iter = remove(coll.begin(),coll.end(), val); //remove只是把要删除的变量移动末尾位置coll.erase(iter, coll.end());二.只删除第一个std::vector coll;…//remove first element with value valstd:转载 2022-05-17 13:57:39 · 3781 阅读 · 0 评论 -
malloc之后要记得memset
下面的代码buf的输出并非是"helloworld",而是"屯屯屯屯屯妄膮\x14y沞helloworld".strcat是将前者字符串的'\0'去掉,加上后面的字符串.而malloc之后不进行memset操作,buf的值实际上是乱码,而非空字符串.char *buf = (char*)malloc(11);strcat(buf, "helloworld");正确的代码应该是如下的那...原创 2020-05-26 23:22:00 · 1120 阅读 · 3 评论 -
emplace原位构造
#include <stdio.h>#include<iostream>#include<vector>using namespace std;class EmplaceTest{public: EmplaceTest() { cout << "ctor: " << this << endl; } EmplaceTest(int i) { m_i = i; co原创 2022-05-09 19:12:07 · 385 阅读 · 0 评论 -
使用ostream打印vector,实现重载<<
#include <iostream>#include <string>#include <vector>template<typename T>std::ostream& operator<<(std::ostream& os, const std::vector<T>& vec){ for (auto& el : vec) { os << el原创 2022-05-06 13:46:12 · 457 阅读 · 0 评论 -
C++编译遇到未定义的引用undefined reference to ‘_imp__ZN7CStringD1Ev‘
平常碰到这种报错,一般原因是没有找到函数定义的地方.可能情况是:缺少cpp; 或者cpp中没有定义;或者没有找到正确的库文件.一般函数名比较长,能够认出来是自己定义的函数.今天这个有点像系统函数,实际上还是自己写的一个函数.分析半天,最后定位到是LIBS +=的路径给错了.以后遇到这个问题,就找它在哪里定义的,再看报错的代码有没有把定义引入进来....原创 2021-10-08 18:55:25 · 2516 阅读 · 1 评论 -
Qt在main函数中使用connect
参见这篇文章:https://stackoverflow.com/questions/16734542/unable-to-connect-signal-to-a-function-inside-main原创 2021-09-23 18:45:55 · 1419 阅读 · 0 评论 -
为什么要使用reference_wrapper?
简单的看了一圈,还没有真正清楚使用它的原因.先把有用的信息记录下来:绑定到需要通过引用传递参数的函数时非常有用:std::reference_wrapper 亦用于按引用传递对象给 std::bind 或 std::thread 的构造函数。它允许引用的行为与其他简单对象一样 - reference_wrapper可以存储在STL容器中。https://www.thinbug.com/q/193703https://zh.cppreference.com/w/cpp/utility/funct原创 2021-09-17 22:52:15 · 658 阅读 · 0 评论 -
Qt创建和使用动态库(共享库)的例子
创建方:.pro中:TARGET = SharedLibraryTEMPLATE = libDESTDIR = $$PWD/../libDEFINES += SHAREDLIBRARY_LIBRARYSharedLibrary.h中://导出类class SHAREDLIBRARYSHARED_EXPORT SharedLibrary{public: SharedLibrary()=default; int add(int a, int b);};//导出函数in原创 2021-09-05 19:04:00 · 318 阅读 · 1 评论 -
ZeroMQ实践之路(2)
从网上找了一个ZMQ实现简单负载均衡的例子实验了一把:客户端同时连接两个启动的服务器,然后与服务器之间收发数据,你会发现程序会自动进行负载均衡操作–与两个服务器交替的通信.客户端:/* * * g++ -o request request.cpp -lzmq * */#include <zmq.h>#include <string.h>#include <stdio.h>#include <unistd.h>#include<原创 2021-08-16 20:54:36 · 120 阅读 · 0 评论 -
记一次报错“xxx类 does not name a type“
一般遇到这种错误,首先想到的是没有包含.h文件,或者存在循环include的问题.于是反复检查是否包含了xxx类所在的.h文件,或者查看是否存在循环include.今天遇到的问题却不是这两种,而是因为#ifndef HEADER_NAME的问题.因为新写的.h文件是复制一个之前存在.h文件后在此基础上改的,所以忘记了把#ifndef的内容给改掉,最后造成2个.h文件中有相同的宏判断:#ifndef HEADER_NAME#define HEADER_NAME//头文件内容#endif因为宏原创 2021-08-03 20:02:41 · 2728 阅读 · 0 评论 -
构造函数使用总结
如果父类需要被子类继承,父类的构造函数中需要写父类和子类通用的操作.而个性化的内容不适合写在父类中,比如父类构造函数需要读取文件A,而子类构造函数需要读取文件B. 这种情况下把父类构造函数写成空,父类对象创建完毕后自己调初始化函数子类构造器会默认调用父类的无参构造器,如果父类没有无参构造器,则需在子类构造器的第一行显式地调用父类的其他构造器。这就是我经常看到的子类构造函数初始化成员列表中,后面跟着一个父类的构造函数...原创 2021-07-31 19:13:17 · 83 阅读 · 0 评论 -
为什么不要在构造函数中调用虚函数(转)
为什么不要在构造函数中调用虚函数转载 2021-07-30 18:28:14 · 160 阅读 · 0 评论 -
调试经验总结
一个思维定势:假如要看一个自定义容器类对象的元素是如何添加进去的,不要全局搜索这个类,这样是比较傻的.而要选择寻找该类下面的Add函数,因为想要添加元素,需要调用添加函数.看代码不仅要看纵向的堆栈调用,也要看横向的顺序执行.当不知道断点后发生了什么,那就在外层的主逻辑上打断点,然后看这里发生了什么.通常的代码形式:当前项目的.h,.cpp文件可以直接使用,而其他项目的代码则是通过库的方式来使用的.比如当前项目事先配置好别的库的路径和名称,在当前项目include进来库对应的头文件,就可以使用..原创 2021-07-20 09:09:43 · 2067 阅读 · 2 评论 -
extern “C“总结(整理自他文)
用在C++代码的.h文件中,让编译器按照C语言的方式去编译被extern "C"所包含的内容.被extern "C"修饰的函数和变量是extern类型的,可以在本模块和其他模块中使用.因此static类型的不可能使用extern “C”.C++支持重载,因此函数编译后会把函数的参数也写在后面,比如_add_int_int,而C不支持,它编译出来只是_add这样的,使用extern "C"能让代码都变成后者.不可以将extern "C"添加在函数内部如果函数有多个声明,可以都加extern “C”,.转载 2021-07-13 20:04:50 · 103 阅读 · 0 评论 -
Qt崩溃捕捉记录
1.一篇好的实例文章,按照里面的内容做了Demo: Using Google Breakpad with Qtdmp文件需要使用VS打开分析,dmp文件依赖.pdb文件才能分析。默认情况下,Debug才会生成.pdb文件,Release没有。#### 待研究:Qt 使用 Google Breakpad 捕获程序崩溃报告(dump文件)QT中使用google breakpad捕获程序崩溃异常这个对Breakpad的原理做了介绍,但没有按照它的代码去做:12.5-使用Qt实现跨平台C++崩溃捕获,原创 2021-07-06 18:41:32 · 1706 阅读 · 0 评论 -
libcurl试用
主要参考文章:https://blog.csdn.net/simonyucsdy/article/details/82835268安装的套路:./configuremakemake install测试是否好用: curl --help如果不好用,则配置path:export PATH=$PATH:/usr/local/bin可以通过curl-config来查看它头文件和库文件安装的位置.实例代码:#include<iostream...原创 2021-07-05 21:21:35 · 71 阅读 · 0 评论 -
强烈不建议使用delete this
参考文章:https://www.tutorialspoint.com/delete-this-in-cplusplus#:~:text=%22delete%20this%22Delete is an operator that is used to Deallocate storage space of Variable.This pointer is a kind of pointer that can be accessed but only inside nonstatic membe.转载 2021-06-22 20:06:51 · 200 阅读 · 0 评论 -
将单例函数封装为全局函数
最近看到一种比较诡异的代码,对单例函数还进行封装,定义在.h文件中.inline classOuter::classInner* GetStaticInner(){ return ((classOuter*)NULL)->Inner(); //返回的实际上还是classInner*类型}类的定义也在该.h文件中:class classOuter {public: class classInner { public: classInner(); virtual ~clas原创 2021-05-26 21:12:51 · 136 阅读 · 0 评论 -
当前类没有默认构造函数,但成员对象有默认构造函数(整理自深度探索C++对象模型 的41页)
当前类没有默认构造函数,但成员对象有默认构造函数class Foo{ public:Foo();//default constructorFoo(int);...};class Bar//自己没有默认构造函数,但其成员对象foo有默认构造函数.{ public:Foo foo;//这个时候Bar::foo需要被初始化private: int n;};//此时编译器会自动为Bar合成一个默认构造函数(不可见)Bar::Bar(){ //伪代码,会原创 2021-05-17 19:36:29 · 257 阅读 · 0 评论 -
用指针模拟迭代器操作
// ios::exceptions#include <iostream>using namespace std;int main () { //只要指针指向数组元素,就可以对它进行下标操作. char c[6] = "hello"; char * pc = &c[2]; cout << "*pc:" << *pc << endl; cout << "*pc[-2]:" <<原创 2021-04-15 00:41:25 · 102 阅读 · 0 评论 -
C++中修改const变量
可以使用如下的方式:int nVar = 1;const_cast<int>(nConst) = nVar; 不过要慎用,因为一般定义为const的变量自然有其不想让人修改的意图.比如今天自己差点用这种方式去修改const类型的数据对象,来达到画面显示正确的目的(尽管代码只有一句,但不符合软件设计的初衷). 正确的做法应该是去修改非const类型的画面对象.参考文章:https://blog.csdn.net/hanshengfei/article/details/78639067原创 2021-04-13 20:08:00 · 210 阅读 · 0 评论 -
现代C++中thread和async的简单对比
C++11中引入了thread类,使用它可以很方便的创建线程.创建的形式为thread t(函数名, 参数…),执行完此行代码,线程函数就直接运行起来了,不需要单独的启动函数.不过主线程中仍然需要join()来等待子线程运行完毕此外C++11中还引入了async函数,是一种更高层的异步方式.它可以用std::future类型的变量来接收线程函数运行的结果,并通过get()的方法来获得结果.这样就不必像thread那样提前定义一个全局变量,在线程函数中进行赋值操作. 此外async还可以指定线程创建策略–是原创 2021-04-13 19:59:56 · 1001 阅读 · 1 评论 -
Qt 的notify函数捕获事件
Qt中可以使用notify来捕获所有的事件。如果你想要捕获事件,需要创建新的类去继承自QApplication,并重写notify函数。需要注意,在初始化自定义类时要先初始化QApplication类(QApplication管理GUI程序的控制流和主要设置。对于用Qt写的任何一个GUI应用,不管这个应用有没有窗口或多少个窗口,有且只有一个QApplication对象。)。具体实现代码如下:myapplication.h#ifndef MYAPPLICATION_H#define MYAPPLIC原创 2021-04-12 21:20:14 · 2179 阅读 · 1 评论 -
C++子类的构造函数后面加:冒号的作用(转)
在C++类的构造函数中经常会看到如下格式的写法:MyWindow::MyWindow(QWidget* parent , Qt::WindowFlags flag) : QMainWindow(parent,flag)上述语句中单冒号(:)的作用是表示后面是初始化列表,一般有三种使用场景。1、对父类进行初始化 (目的是什么呢?在创建子类对象时,能够把参数传给父类,从而先完成对父类的初始化.子类构造函数必须要调用父类的构造函数(无论显式还是隐式))调用格式为“子类构造函数 : 父类构造函数”,如下,转载 2021-04-12 20:00:38 · 1546 阅读 · 1 评论