C/C++
文章平均质量分 51
C/C++
HHT0506
这个作者很懒,什么都没留下…
展开
-
C语言之strchr()
strchr原创 2022-12-18 21:56:54 · 173 阅读 · 0 评论 -
C语言之stroke_s()
stroke_s原创 2022-12-18 21:28:33 · 620 阅读 · 0 评论 -
C++ 虚函数表图解
一、前言一直以来,对虚函数的理解仅仅是,在父类中定义虚函数,子类中可以重写该虚函数,并且父类指针可以指向子类对象,调用子类的虚函数(多态)。在读研阶段经历的几个项目中,自己所写的类中并没有用到虚函数,对虚函数这个东西的强大之处并没有太多体会。最近,学了设计模式中的简单工厂模式,对多态有了具体的认识。于是,补了补多态、虚函数、虚函数表相关的知识,参考相关博客,加上自己的理解,整理了这篇博文。二、含有虚函数类的内存模型以下面的类为例(32位平台下):class Father {public: vir原创 2021-05-10 20:49:37 · 1122 阅读 · 7 评论 -
C++ typedef定义函数与函数指针
一、定义函数代码#include<iostream>using namespace std;typedef int (FUNC)(int, int);FUNC add;int main(){ cout << add(1, 2) << endl; return 0;}int add(int a, int b){ return a + b;} 其中,typedef int (FUNC)(int,int),就是定义了一个函数类型原创 2021-04-26 14:28:54 · 1169 阅读 · 2 评论 -
C++ 定义指针时const在不同位置处的作用
1.两个约定const只是修饰作用,修饰的对象遵循默认修饰左边的对象,若左边无对象,则修饰右边对象声明一级指针时含有const,无非两种情况:不能改变指针的指向,不能通过指针修改指向的内容根据上述约定:(1)const int *pconst修饰int,即不能通过指针修改指向的内容。(2)int const *pconst修饰int,即不能通过指针修改指向的内容。(3)int * const pconst修饰指针p,即p的指向不能改变。(4)int const *原创 2021-02-28 17:47:02 · 945 阅读 · 0 评论 -
C++ assert断言
什么时候用异常,什么时候用断言?自定义的C++断言宏C++ assert宏实现原理原创 2021-02-14 19:02:43 · 285 阅读 · 1 评论 -
C++ 输入流、输出流、输入输出流
1.分类输入流、输出流、输入输出流。2.输入输出的理解数据进入程序,为输入;数据流出程序,为输出。或者说,数据从外存(硬盘)进入内存,为输入,数据从内存流出只外存(硬盘等),为输出。比如:(1)文件流ifstream为输入文件流,对象为a,存放硬盘某路径数据文件,将数据流入string对象b,这个过程为读文件,即输入。ofstream为输出文件流,对象为a,打开硬盘某路径空数据文件,string对象b流出至空数据文件,这个过程为写文件,即输出。fstream为输入输出文件流,既可以输入,又可原创 2021-01-23 22:14:02 · 628 阅读 · 0 评论 -
C++ map与unordered_map
1.区别map:本质红黑树,插入新数据后自动排序,存放的数据是有序的unordered_map:本质哈希表,数据无序,根据插入数据的顺序排列,查找速度快。使用上,map与unordered_map的函数都一样,如果不需要排序,使用unordered_map即可。2.头文件map:#include<map>unordered_map:#include<unordered_map>3.使用1.定义map<int,char> p;2.添加原创 2021-01-10 12:12:05 · 500 阅读 · 0 评论 -
C++ vector
C++ 中Vector常用基本操作vector容器用法详解原创 2020-12-08 22:13:39 · 249 阅读 · 0 评论 -
C++使用ifstream读取txt文件
转自:c++使用getline和ifstream读取文件#include < iostream >#include < fstream >#include < string >using namespace std;// 输出空行void OutPutAnEmptyLine(){ cout << " /n ";}// 读取方式: 逐词读取, 词之间用空格区分// read data from the file, W ord B转载 2020-12-08 10:37:51 · 4347 阅读 · 0 评论 -
C/C++ 大小端转换
自写函数实现#include<iostream>using namespace std;unsigned int fun1(unsigned int a){ unsigned int b = 0; *(char *)(unsigned int(&b)) = *(char *)(unsigned int(&a) + 3); *(char *)(unsigned int(&b) + 1) = *(char *)(unsigned int(&a) +原创 2020-12-02 16:20:12 · 4008 阅读 · 0 评论 -
C/C++ —— 小端转大端函数的使用
函数说明#include <arpa/inet.h>uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);uint32_t ntohl(uint32_t netlong);uint16_t ntohs(uint16_t netshort);/*h表示host,n表示network,l表示32位长整数,s表示16位短整数。如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回,如果主机是原创 2020-11-27 13:32:34 · 6885 阅读 · 0 评论 -
C/C++ ——分别输出unsigned int四个字节内容
目标将4字节大小变量拆开查看各自内容,弄清4字节数据存放顺序。代码及测试 unsigned int temp=0x01ff02fe; printf("%d\n", &temp); unsigned int address; scanf_s("%d", &address); printf("%d\n", *((unsigned char *)address));分析相比于之前的文章(C语言--输入地址,输出该地址内容),修改了temp值以及最后一行地址的类型.原创 2020-11-26 22:36:46 · 4696 阅读 · 1 评论 -
C语言--输入地址,输出该地址内容
目标输入一个内存地址,输出该内存地址的内容代码及测试 unsigned int temp = 4; printf("%d\n", &temp); unsigned int address; scanf_s("%d", &address); printf("%d\n", *((unsigned int *)address));分析(1)定义一个临时变量temp并赋值为4(2)打印该变量的地址,十进制显示(3)定义一个地址变量address(4)..原创 2020-11-26 21:55:00 · 6544 阅读 · 0 评论 -
C++ 查询电脑计数
前言这个功能由项目调试所需,程序中定义了一个定时器,50ms执行一段代码,但是实际效果感觉并不是50ms处理一次,于是在代码中加入后面那段程序,用来查看每次执行时电脑计数为多少,结果确实如我所想,虽然设置50ms执行一次,但实际上二三百毫秒才执行一次。头文件#include<windows.h>函数封装double queryTime(){ LARGE_INTEGER litmp; LONGLONG QPart; double dfFreq, dfTim;原创 2020-09-04 13:03:37 · 297 阅读 · 0 评论 -
【源码及附件】如何利用QueryPerformanceFrequency()与QueryPerformanceCounter()实现计算机精确定时
在Windows中实现精确定时,可用QueryPerformanceFrequency()函数与QueryPerformanceCounter()函数,如下所示,其中QPart是CPU从某个事件起以dfFreq的频率累积计的数,这个事件可能是电脑开机以来,也可能是某次开机或装系统以来,我曾多次尝试输出,计算出世间,有时候数值达到几百小时,有时候几分钟,几分钟明显是开机以来的时间。这个数在开机时会一...原创 2019-09-15 15:17:52 · 927 阅读 · 0 评论 -
C++ string替换指定字符
string自带replace()方法并没有实现这一功能,需要借助<algorithm>中的replace()。比如,我在资源管理器地址栏直接赋值地址后,输入给某一string变量,程序中使用这一地址前,首先需要将反斜杠替换为正斜杠,程序如下:#include<iostream>#include<string>#include<algorithm>using namespace std;void main() { cout <&原创 2020-09-03 19:56:08 · 3317 阅读 · 0 评论 -
C++ cin输入空格
问题提出如果使用流操作符>>,则输入字符串时遇到空格时会结束接收,但有时我们需要输入带有空格的字符串,或者,实际中手动输入路径,路径中有空格,这种情况该怎么办呢?解决使用getline()函数,比如:#include<iostream>#include<string>using namespace std;void main() { cout << "输入字符串:"; string dir; getline.原创 2020-09-03 19:43:01 · 3020 阅读 · 0 评论 -
可执行文件链接动态库(dll)的一点猜想
百度exe加载动态库路径顺序,大致是这样的:但是有一个问题,假如我装了两个版本的Qt库A和B,其dll路径都写在了环境变量Path中,并且A在B的前面,那么我在使用B版本库编译的程序,运行时肯定是先搜寻Path中排在前面的路径下是否存在所需dll。那么无疑是先搜寻到A版本的dll,搜寻到了同名的dll,是否会停止继续搜寻,然后使用这个dll,发现版本不对,继而报错呢?或者再直接一点,我将一个32位版本的dll放到一个64位的exe目录下,如下:运行程序首先是搜寻到自身目录下这三个库,那.原创 2020-09-02 16:30:11 · 361 阅读 · 0 评论 -
【C/C++调试】输出带有所在文件及行号的调试信息
使用宏定义:#define cout cout<<"[" << __FILE__ << ":" << __LINE__ << "]: "这样使用 cout 时便能够同时输出所在文件及行号。原创 2020-08-27 19:19:17 · 582 阅读 · 0 评论 -
C/C++返回局部变量的引用/地址
程序1下面这段程序,返回局部变量的引用,将其赋给指针p,第一次打印可以输出a的值,第二次便是一个随机数:#include<iostream>using namespace std;int *p = NULL;int& foo(){ int a = 10; return a; }void main(){ p=&foo(); cout << *p << endl; cout << *p << end原创 2020-08-05 09:25:22 · 2159 阅读 · 0 评论 -
C++ stringstream的使用
例子stringstream可以用来分割被制表符、空格分开的字符串,例子如下:#include<iostream> #include<sstream> #include<string> using namespace std;int main() { string str = "My name is HHT"; stringstream word(str);//或者stringstream word;word<<str;原创 2020-07-27 11:19:50 · 761 阅读 · 0 评论 -
C++ int a=b 与int &a=b
int a = b; 定义了一个int类型变量a,将b的值赋给a; int &a = b; 定义了b的一个别名,a与b完全等价,对a操作就是对b操作,可以输出a与b的地址&a、&b,发现地址相同。原创 2020-07-18 22:09:45 · 3856 阅读 · 0 评论 -
C++ for(auto &a:b)、for(auto a:b)、for(const auto &a:b)
b为数组或容器,是被遍历的对象for(auto &a:b),循环体中修改a,b中对应内容也会修改for(auto a:b),循环体中修改a,b中内容不受影响。#include <iostream>using namespace std;void main(){ int arr[5] = {1,2,3,4,5}; for (auto &a : arr) { cout << a; } cout << endl; for (a原创 2020-07-18 18:03:16 · 16020 阅读 · 9 评论 -
C++ string相关操作
目录1.本身属性2.增加操作3.删除操作4.修改字符串5.查找操作6.读取操作7.其他参考1.本身属性s.capacity(); //返回当前容量(不增加内存可存放元素个数)s.size();//返回当前元素个数s.length();//与size()相同,没有区别s.empty();//字符串为空,返回true,非空,返回false2.增加操作s.append(str);//字符串尾端接上一个子串strs.push_back(ch);//字符串尾原创 2020-06-16 22:05:37 · 424 阅读 · 0 评论 -
STL:栈(stack)与队列(queue)
栈的主要操作: stack<int> s; 定义一个存放int数据的栈 s.push(num) 栈顶压入元素num s.pop() 弹出栈顶元素 s.top() 返回栈顶元素,不删除 s.size() 返回栈元素个数 s.empty() 判断栈是...原创 2020-06-16 10:13:09 · 398 阅读 · 0 评论 -
C++结束cin
while (cin >> num){}输入完成后,按Ctrl+Z或者Ctrl+D,再按Enter即可。原创 2020-06-16 08:54:19 · 1223 阅读 · 0 评论 -
vector和list的区别
请你说一说vector和list的区别,应用,越详细越好?1、概念:1)Vector连续存储的容器,动态数组,在堆上分配空间底层实现:数组两倍容量增长:vector 增加(插入)新元素时,如果未超过当时的容量,则还有剩余空间,那么直接添加到最后(插入指定位置),然后调整迭代器。如果没有剩余空间了,则会重新配置原有元素个数的两倍空间,然后将原空间元素通过复制的方式初始化新空间,再向新空间增加元素,最后析构并释放原空间,之前的迭代器会失效。性能:访问:O(1)插入:在最后转载 2020-06-04 20:39:15 · 664 阅读 · 0 评论