
c++学习
EloryDo
当你的才华还撑不起你的野心时,那你就应该静下心来学习。当你的经济还撑不起你的梦想时,那你就应该踏实的去工作!
展开
-
Linux用backtrace定位分析段错误
Linux c/c++开发环境下,可以使用以下函数来获取进程调用的堆栈信息#include <execinfo.h>int backtrace(void **buffer, int size);该函数用于获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针列表。参数 size 用来指定buffer中可以保存多少个void* 元素。函数返回值是实际获取的指针个数,最大不超过size大小,为了取得全部的函数调用列表,应保证buffer和size足够大。原创 2022-04-01 15:58:15 · 1306 阅读 · 0 评论 -
sort和priority_queue比较函数的区别
两者第三个参数比较函数的区别是相反的。两者默认的都是less1、less情况sort排序是从小到大 priority_queue是大顶堆,即从大到小2、greater情况sort排序是从大到小 priority_queue是小顶堆,即从小到大3、自定义同样的仿函数,sort和priority_queue也是相反的struct MyStruct{ int data; MyStruct(int val) { data = val; }};struct cmp {原创 2021-10-11 10:18:12 · 791 阅读 · 0 评论 -
C++计时
1、采用clock()来实现clock_t start = clock();// do something...clock_t end = clock();cout << "time is " << (double)(end - start) / CLOCKS_PER_SEC << "s" << endl;2、采用c++11 的chronostd::milli:毫秒std::micro:微秒std::nano:纳秒..原创 2021-07-02 10:36:46 · 171 阅读 · 0 评论 -
c++回调函数
一、使用函数指针可以使用typedef和using两种表示方法//回调//typedef void(*CbkFunc)(void *arg);using CbkFunc = void(*)(void *arg);//c++11 using新用法,可以替代typedefvoid TestFunc(void *arg){ int param = (int)arg; cout << param << endl;}void TestCbk(CbkFunc c.原创 2021-06-29 10:17:57 · 135 阅读 · 0 评论 -
feof如何跳出循环问题
介绍一下IO操作的基础知识 (1) long ftell(FILE *stream);功能:用于得到文件位置指针当前位置相对于文件首的偏移字节数,即可计算得到stream的当前位置(2)int fseek(FILE *stream, long offset, int origin)功 能:函数设置文件指针stream的位置。如果执行成功,stream将指向以stream的位置为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小..原创 2021-03-24 18:01:12 · 881 阅读 · 1 评论 -
自己编写的程序开机的时候自启
一共三种方法Win+R输入shell:startup将需要启动的程序放在该文件加下即可通过windows的任务计划1.搜索并打开“任务计划程序”2.创建基本任务3.设定启动程序exe的位置4.下一步,完成即可代码生成注册表实现自启#include <windows.h>#include <stdio.h>void AutoStart(){ //找到系统的启动项 char *Register = "Software\.原创 2020-06-22 11:40:21 · 1138 阅读 · 0 评论 -
vs调用堆栈调试
总结一下之前不知道的知识点,VS下的堆栈调试。1.程序分为好多层的时候,在某处打一个断点2.可通过调试----窗口----调用堆栈或者Ctrl+Alt+c来打开调用堆栈的窗口通过堆栈信息可以知道其上下调用的逻辑3.如果想跳转到上一层,来查看上一层的数据信息,可通过右键堆栈信息,选择转到源代码,跳转到源代码所在行...原创 2020-05-28 15:16:55 · 5824 阅读 · 0 评论 -
设计模式--模板模式和策略模式的区别
策略模式和模板模式两者都是多态的体现,其具体的讲解可参考这位大神的文章,将的很具体。策略:https://www.cnblogs.com/jiese/p/3181099.html模板:https://www.cnblogs.com/jiese/p/3180477.html模板模式:定义一个算法流程的骨架,把一些可变节点延迟到具体的子类中去执行策略模式策略模式:将某个类的核心算法...原创 2020-04-29 16:59:20 · 2378 阅读 · 0 评论 -
使用TinyXML2进行xml文件操作
简介TinyXML2适用于大部分的C/C++项目开发,经得住考验,是最好的选择。较TinyXML1而言,TinyXML2化繁为简,使用时只需要包含两个文件,而TinyXML1需要6个文件,一般生成静态链接库供项目的使用。它使用更少的内存,更快,并使用更少的内存分配。TinyXML2的优点: (1)对大部分大部分的C/C++项目具有普适性。 (2)使用较少的内存(约TinyXML1的40%),...原创 2020-04-27 16:18:17 · 728 阅读 · 0 评论 -
使用TinyXml对xml文件进行操作
简介读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,它是目前非常流行的一款基于DOM模型的XML解析器,简单易用且小巧玲珑,非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作。 下载TinyXML的网址:http://www.grinninglizard.com/tinyxml/ 使用TinyXML只需要将其中的6个文件拷贝到...原创 2020-04-27 14:25:10 · 224 阅读 · 0 评论 -
C/C++中结构Struct和Class的区别,内存分配中的各种区别
C/C++的Struct中也有构造函数和析构函数等,其余Class的区别如下:如果从空间分配上来看,struct变量放在栈上,而class变量放在堆上,因此struct变量会自动释放,而class变量需要手动释放。c不是面向对象的语言,没有继承等概念。 struct默认成员类型是public,class默认成员类型是private。补充一下内存分配的知识点,如下:1.内存分配分为...原创 2020-05-09 16:04:23 · 1989 阅读 · 0 评论 -
C++typedef的用法详解
基本概念 #define 只是在预处理过程对代码进行简单的替换。typedef 只对已有的类型进行别名定义,不产生新的类型;其英文的解释Typedef does not work like typedef [type] [new name].The [new name] part does not always come at the end总结一下就是:任何声明变量的语...原创 2019-12-13 10:43:23 · 541 阅读 · 0 评论 -
RSA加密V2
以1024来对任意长度的数据进行加密,本方法的加密部分是将待加密数据按照117的长度大小进行分割,不足117按实际大小分割加密,解密部分是将数据分割成不同的子串,每个子串的大小为173的固定长度,然后对子串进行解密。std::string RSA_Client::RSA_Pub_Encrypt_Base64(const std::vector<sDefectItem>& ...原创 2019-11-12 09:48:31 · 415 阅读 · 0 评论 -
不受秘钥长度限制RSA加密
背景介绍:RSA加密一般使用的padding标准有NoPPadding、OAEPPadding、PKCS1Padding等,其中PKCS#1建议的padding就占用了11个字节。128字节(1024bits)-减去11字节正好是117字节,但对于RSA加密来讲,padding也是参与加密的,所以,依然按照1024bits去理解,但实际的明文只有117字节了。即RSA加密算法存在加密数据限制问题(...原创 2019-11-08 14:16:13 · 2769 阅读 · 0 评论 -
QT中删除QtableWidget中的某一行
private: QMenu *RightClick; //右键点击 QAction *deleteAction; //删除事件(如需要其它事件,可新定义) int iDeletcRow;private slots: void RightClickSlot(QP...原创 2019-11-07 15:55:23 · 13091 阅读 · 2 评论 -
c++学习(1)
1、cin和cout的使用cout.put()用来显示一个字符。每次读取一行字符串输入(1)面向行的输入:getline()getline()读入一行,直到遇到换行符才结束,字符中间可以有空格。输入字符数组和字符串的不同:char name[10];string grade;cin.getline(name, 10);getline(cin, grade);原创 2015-09-13 15:51:25 · 352 阅读 · 0 评论 -
C++学习(3)
1、引用引用是已定义变量的别名(另一个名称)通过将引用变量作为参数,函数将使用原始数据,而不是其拷贝。从而可以修改原始数据。int &指的是指向int的引用。引用必须在定义时马上被初始化,如:int &ra = a;而不能这样:int a;int &ra;ra = a;2、函数重载函数的重载是以形参类型和个数来区分的,而不是以形参名和返回值来区分int原创 2015-10-22 11:31:04 · 442 阅读 · 0 评论 -
c++学习(2)
1、程序延时时间最好是采用系统时钟来完成此功能。//waiting.cpp#include#includeint main(){using namespace std;coutfloat secs;cin>>secs;clock_t delay = secs * CLOCK_PER_SEC;//CLOCK_PER_SEC表示每秒钟包含的系统时间单位数原创 2015-09-20 13:16:48 · 281 阅读 · 0 评论 -
C++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。转载 2015-11-18 15:37:24 · 345 阅读 · 0 评论 -
char*和char[ ]的区别
c和指针中发现的一个问题。#include <stdio.h>#include <malloc.h>void reverse_string( char *string);int main(){reverse_string("abcdef");return 0;}void reverse_string(char *string){char *last_char;for(l...原创 2016-03-04 15:15:02 · 997 阅读 · 0 评论 -
strcpy和strlen函数
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>char * my_strcpy(char *dest, const char *src){ assert( (NULL != dest) && (NULL != src...原创 2019-01-29 22:39:30 · 397 阅读 · 0 评论 -
strcat、strcmp
char *my_strcat(char *dest, const char *src){ char *ret = dest; assert( (NULL != dest) && (NULL != src) ); while('\0' != *dest) dest++; while( (*dest++ = *src++) != '\0'); return re...原创 2019-02-23 14:07:59 · 196 阅读 · 0 评论 -
程序内存分配
内存分配形式如下:1、栈(Stack) : 由编译器自动分配和释放,比如函数参数、局部变量、数组等2、堆(Heap) : 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,比如malloc/free、new/delete3、全局区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的...原创 2019-02-23 14:55:16 · 210 阅读 · 0 评论 -
在字符串中找出由单一重复字符组成的最长子字符串
//在字符串中找出由单一重复字符组成的最长子字符串char *find_max_substr(const char* srcstr){ assert( (NULL != srcstr) ); int len = strlen(srcstr); int i, j, start = 0; int maxlen = 1; for (int i = 0; i < len ; i...原创 2019-02-23 15:40:46 · 710 阅读 · 0 评论 -
排序算法
1、快速排序 快速排序步骤:(1)设置两个变量i和j,i = left,j = right 注意:(只能是i=left,而不能写成i=left+1。如果写成i=left+1,则当出现两个数比较的时候,比如-5,0,此时left=0,i=1,这时0和-5就会交换顺序,而实际中是不需要交换顺序的)(2)以第一个数组元素作为关键数据,赋值给key,即key = a[left];(...原创 2019-03-13 22:06:47 · 119 阅读 · 0 评论 -
static变量和static函数
1、static全局变量和普通的全局变量static全局变量在定义该变量的当前源文件内有效, 在同一源程序的其它源文件中不能使用它。而普通的全局变量在各个源文件中都是有效的(当一个源程序由多个源文件组成时)。2、static局部变量和普通的局部变量static局部变量存放在静态存储区,其只在当前函数中起作用,但是其生存周期是直到当前程序结束为止,而局部变量存在于栈中。3、stati...原创 2019-03-28 21:30:18 · 2070 阅读 · 0 评论 -
c++学习笔记
1.struct成员默认访问方式是public,而 class默认访问方式是private!2.exit函数终止程序执行会调用析构函数 ,abort函数终止程序不会调用析构函数!3.静态局部变量直到程序终止时才退出!4.通过public 函数返回 private成员的引用有可能会破坏类的封装 ,造成外部变量可以改变类私有成员值!5.常量对象只能调用常转载 2015-09-08 10:28:30 · 283 阅读 · 0 评论