
C++学习
核动力打工仔
山高水长,纵使缓慢,驰而不息……
展开
-
Linux下获取文件夹下普通文本文件和子文件夹中的文件的路径和所有文件的字节数之和
Linux下获取文件夹下普通文本文件和子文件夹中的文件的路径和所有文件的字节数之和。原创 2023-08-30 21:45:40 · 262 阅读 · 0 评论 -
在文件中定义了一个全局变量,在本文件和其他文件中如何使用它。—— 匿名命名空间
在匿名命名空间中声明的名称也将被编译器转换,与编译器为这个匿名命名空间生成的唯一内部名称(即这里的__UNIQUE_NAME_)绑定在一起。还有一点很重要,就是这些名称具有internal链接属性,这和声明为static的全局名称的链接属性是相同的,即名称的作用域被限制在当前文件中,无法通过在另外的文件中使用extern声明来进行链接。注意:命名空间都是具有external 连接属性的,只是匿名的命名空间产生的__UNIQUE_NAME__在别的文件中无法得到,这个唯一的名字是不可见的....转载 2022-08-30 10:56:17 · 350 阅读 · 0 评论 -
求两个数的最大公约数和公倍数
问题:用户输入两个数,求这两个数的最大公约数和最小公倍数?原创 2022-08-24 15:55:48 · 197 阅读 · 0 评论 -
C++把引用作为返回值
当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。当函数返回一个引用时,则返回一个指向返回值的隐式指针。这样,函数就可以放在赋值语句的左边。通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护。C++ 函数可以返回一个引用,方式与返回一个指针类似。原创 2022-08-24 15:08:13 · 329 阅读 · 0 评论 -
C++ 内联函数详解
内联函数的一些笔记原创 2022-08-20 17:28:44 · 1532 阅读 · 0 评论 -
C++ 内存泄漏与溢出
内存泄漏与溢出原创 2022-08-20 10:56:26 · 1849 阅读 · 0 评论 -
冒泡排序及优化 + 鸡尾酒排序
排序算法☞冒泡排序原创 2022-06-07 10:46:45 · 166 阅读 · 1 评论 -
C++函数指针基础
函数指针原创 2022-06-03 15:54:57 · 137 阅读 · 0 评论 -
设计模式 —— 单例模式
//******************************* 懒汉式1 *******************************#include <iostream>#include <memory> // shared_ptr#include <mutex> // mutex// version 2: thread is safe now and memory doesn't leakclass Singleton {public: t原创 2022-05-03 15:27:20 · 232 阅读 · 0 评论 -
运算符 ‘取非‘ 与 ‘取反‘ 的异同
一、运算顺序不同① ~:位运算符,是对x,y进行位运算;② !:是逻辑运算符,用于从左到右求表达式的真值。二、运算过程不同① ~: 位运算的运算速度通常与加法运算相同。② !:逻辑运算符用于对包含关系运算符的表达式进行合并或取非。三、运算过程不同① ~:位运算符将数字视为二进制值,并按位进行相应运算,运算完成后再重新转换为数字。② !:使用逻辑运算符的表达式,返回0表示”假”,返回1表示 ”“真” 。...原创 2022-04-24 15:57:36 · 6439 阅读 · 0 评论 -
Windows开发平台下 —— pthreads.h头文件的配置
下载所需的相关文件(免费哦)pthreads文件分三部分这三个文件内容按照表里的对应关系添加到相应目录(注:对应位置表示你安装的VS里的文件)。注:由于pthread.h头文件里和time.h中(time.h中通常也被其他的库/头文件包含)已经声明了的timespec,会出现“timespec”:“struct”类型重定义的问题,所以我对pthread.h头文件里的timespec做了注释,这点需要说明。最后,在程序代码中加入静态链接的添加命令即可。#pragma ..转载 2022-04-21 10:27:42 · 762 阅读 · 0 评论 -
C++ 常量成员函数的碎碎知识点
#include<iostream>using namespace std;//常量指针:指向常量的指针 const int* p = &a; 更加关注 不可以通过指针 改变 指针所指向的变量或对象的值;//指针常量:指针是一个常量 int* const p = &a; 更加关注 指针指向唯一性class A {public: //记得加上作用域,不然默认为私有 A() {} ~A() {} void A() { a = 5;原创 2022-04-20 15:03:03 · 894 阅读 · 0 评论 -
C++深拷贝 浅拷贝
#include<iostream>using namespace std;//深拷贝与浅拷贝class Person{public: Person() { cout << "Person的默认构造函数调用" << endl; } Person(int age, int height) { m_Age = age; m_Height = new int(height); cout << "Person的有参构造函数调用原创 2022-04-17 20:08:19 · 118 阅读 · 0 评论 -
memset函数
int main(){ int test[100]; fill(test, test + 100, 1); cout << "case 1:" << endl; for (int i = 0; i < 100; i++) { cout << test[i] << " "; } cout << endl << endl; //void* menset(void* str, int c, size_t n)原创 2022-03-29 09:01:54 · 195 阅读 · 0 评论 -
“子序列”与“子串”详解
子序列与子串的区别子序列:从从字符串中删除一些字符后不更改剩余字符串字符顺序而生成的序列!子 串:原序列中必须连续的一段!code:#include <vector>#include <string>#include <iostream>using namespace std;void print_vec(const vector<string>& str);//------------------------------原创 2022-03-16 19:07:37 · 5396 阅读 · 0 评论 -
输出数组的全部子集
输出整数数组的全部子集(子集个数计算公式:子集个数 = 2^n,n表示数组的元素的个数)//问题:生成数组的所有空子集!//数组的子集个数 = 2^n - 1#include <vector>#include <iostream>using namespace std;vector<vector<int>> subsets(vector<int>& vec){ vector<vector<int>&g.原创 2022-03-16 10:50:44 · 1514 阅读 · 0 评论 -
C++中的map于unordered_map的区别
前言C++的STL库实现有两种字典结构,即map和unordered_map(也就是通俗意义上的hash map)。这两者虽然都称为Map,但其实它们的底层实现原理具有很大差距,因此它们的使用场景也不尽相同。今天特意研究了一下,下面从几个方面具体谈谈它们的差别及其具体的使用场景。介绍字典类型又被称为关联数组(associative array),关联数组和正常数组的使用方法是相似的,但其不同之处在于字典结构的下标不必是整数,而可以是任意类型。map和unordered_map这两种字典结构都是通过原创 2022-03-15 08:56:57 · 1620 阅读 · 1 评论 -
“冒泡排序”你会嘛?
#include <vector>#include <iostream>#include <algorithm>using namespace std; //冒泡排序1/** 排序思想:* 从第一个数开始,一次往后进行比较,若第一个数大于第二个数(第二个数大于第三个数...),则交换。* 从而每一轮循环都能比较出最大数或最小数,放在最后确定的位置。*/void bubbleSort_1(vector<int>& vec){原创 2022-03-10 14:51:49 · 123 阅读 · 0 评论 -
C++ 实现自己的字符串分割(split())函数
//string and c-string#define _CRT_SECURE_NO_WARNINGS //用来关闭warning功能#include <iostream>#include <cstring>#include <string>#include <cstring>using namespace std;//未使用strcpy、strtok等函数的安全版本(strcpy_s、strtok_s)时,若未加上关闭warni原创 2022-03-01 14:14:26 · 757 阅读 · 2 评论 -
C++中pair的使用
详细使用见下面的代码: //向map中的vector中添加pair数对 map<int, vector<pair<int, int>>> m_pair; for (int i = 0; i < 10; ++i) { m_pair[i].push_back(make_pair<int, int>(i+1000, i + 100)); } for (auto ite = m_pair.begin(); ite != m_pair.end()原创 2022-02-21 16:29:16 · 623 阅读 · 0 评论 -
“约瑟夫环”问题的完美解决代码
题目描述:假设共有number个人围成一个“环”,编号分别为1,2,3,……,number;假设开始报数的人的编号为start,报数为k的人 出圈;然后再从他的下一个人起重新报数,报数为k的人出圈;如此循环下去,直到所有人全部出圈为止。当任意给定人数number、起始报号的人的编号为start,报号为k的人出圈,设计算法求number个人出圈的次序。示例输入:number = 10,start = 3,k = 7;输出:9,6,4,3,5,8,2,7,10,1;思路所有人排成一排,每次原创 2022-01-01 16:54:50 · 1830 阅读 · 0 评论 -
C++ 输出数组的全部子区间
问题表述:输出数组的全部子区间。示例:输入数组:nums = [1,2,3,4,5];输出:[ [1],[2],[3],[4],[5],[1,2],[2,3],[3,4],[4,5],[1,2,3],[2,3,4],[3,4,5],[1,2,3,4],[2,3,4,5],[1,2,3,4,5] ]代码实现:#include <vector>#include <iostream>using namespace std;int main(原创 2021-12-29 20:16:41 · 1397 阅读 · 0 评论 -
将句子分割成单词 并 输出
#include <string>#include <vector>#include <iostream>using namespace std;int main(){ string str = "Talk is cheap show me the code"; //将字符串分成单个单词字符串 vector<string> res; string word_str = ""; int i = 0; char ch = str[i];原创 2021-12-29 10:08:11 · 1399 阅读 · 0 评论 -
写一段代码,可以输出这段代码本身
//问题:写一段代码,可以输出这段代码本身#include <iostream> #include <fstream> using namespace std;int main(){ ifstream ifs(__FILE__); cout << ifs.rdbuf(); ifs.close(); return 0;}原创 2021-12-27 21:12:35 · 653 阅读 · 0 评论 -
__stdcall、__cdcel、__fastcall三者的区别
__stdcall、__cdecl和__fastcall是三种函数调用协议,函数调用协议会影响函数参数的入栈方式、栈内数据的清除方式、编译器函数名的修饰规则等。调用协议常用场合__stdcall:Windows API默认的函数调用协议。__cdecl:C/C++默认的函数调用协议。__fastcall:适用于对性能要求较高的场合。函数参数入栈方式__stdcall:函数参数由右向左入栈。__cdecl:函数参数由右向左入栈。__fastcall:从左开始不大于4字节的参数放入CP.转载 2021-12-01 19:19:34 · 498 阅读 · 0 评论 -
Dijkstra(迪杰斯特拉)算法求最短路径
Dijkstra.h#pragma once //保证头文件只被编译一次#include<iostream>#include<string>using namespace std;//使用Dijkstra算法实现求解最短路径问题:采用邻接矩阵来存储图;//记录起点到每个顶点的最短路径的信息struct Dis{ string path; int value; bool visit; Dis() { visit = false; value原创 2021-11-04 19:45:52 · 674 阅读 · 0 评论 -
如何在c++代码中正常使用Π?
#define _USE_MATH_DEFINES#include<iostream>#include<math.h>int main(){ std::cout << M_PI << std::endl; printf("pi = %.50f \n", M_PI); //保留小数点后50位。 return 0;}原创 2021-11-04 16:47:56 · 3924 阅读 · 0 评论 -
字典树详解
字典树字典树:又称单词查找树(Trie树,又称前缀树),是一种哈希树的变种。典型应用是用于统计、排序和保存大量的字符串(但不 仅限于字符串),所以常被用于文本词频统计。 可用于快速查询「某个字符串/字符前缀」是否存在的数据结构。还可用于高效的存储和检索字符串数据集中的键。其核心是使用"边"来代表有无字符,使用"点"来记录是否为"单词结尾"以及“其后续字符串的字符是什么”。优点:利用字符串的公共前缀来减少查询时间,尽量减少无谓的字符串比较,查询效率比哈希树高。性质:根节点不包含字符串原创 2021-10-24 20:02:52 · 440 阅读 · 0 评论 -
一文弄懂return、break、continue的作用!
break,continue,return的区别为:作用不同、结束不同。一、作用不同1、break:执行break操作,跳出所在的当前整个循环,到外层代码继续执行。2、continue:执行continue操作,跳出本次循环,从下一个迭代继续运行循环,内层循环执行完毕,外层代码继续运行。3、return:执行return操作,直接返回函数,所有该函数体内的代码(包括循环体)都不会再执行。二、结束不同1、break:break不仅可以结束其所在的循环,还可结束其外层循环,但一次只能结束一种循环。原创 2021-10-17 19:59:37 · 1079 阅读 · 0 评论 -
分解质因数(C++代码实现)
分解质因数题目描述:将一个正整数分解质因数。输入数据包含多行,每行是一个正整数n(1<n<10000)。输出每个整数的质因数。输入样例:90,256,199;输出样例:2335 = 90;22222222 = 256;199 = 199;注:每个合数都可以写成几个质数相乘的形式。其中每个质数都是这个合数的因数,叫做这个合数的分解质因数。分解质因数只针对合数。分解质因数的算法叫“短除法”。求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。code:#in原创 2021-10-08 14:50:31 · 5486 阅读 · 1 评论 -
LeetCode统计数组中只出现一次的数字
#include #include using namespace std;//输出数字number的二进制表示形式//统计num1数组中的数字的二进制表示形式中各个 位 1出现的总次数;//使用 & (位与)运算符void digital_binary_show(vector vec){int* binary_arr = new int[32];memset(binary_arr, 0, sizeof(int) * 32); //将数组初始化为0,;for (int num原创 2021-08-27 16:12:37 · 120 阅读 · 0 评论 -
C++ 使用map统计给定字符串中的字符出现的次数
#include <map>#include <string>#include <iostream>using namespace std;int main(){ string str = "abbcccddddeeeeeffffffggggggghhhhhhhhiiiiiiiiijjjjjjjjjj"; int len = str.length(); map<char, int> _map; for (int i = 0; i &l原创 2021-08-12 21:20:51 · 2262 阅读 · 0 评论 -
如何使用#define_CRT_SECURE_NO_WARNINGS
1.我们在编译老的用C语言的开源项目如lua源包的时候,可能因为一些老的.c文件使用了strcpy,scanf等不安全的函数,而报警告和错误,而导致无法编译通过。2.此时我们有两种解决方案:a.在指定的源文件的开头定义:#define _CRT_SECURE_NO_WARNINGS (只会在该文件里起作用)b.在项目属性里设置,这会在整个项目里生效,依次选择:属性->配置属性->C/C++ ->预处理器->预处理器定义->编辑最下面加上一行:_CRT_SECURE_NO转载 2021-07-18 17:31:52 · 5141 阅读 · 0 评论 -
C++中正确使用M_PI(Π)的代码
#include <iostream>#include <corecrt_math_defines.h> //M_PI在此头文件中int main(){ printf("%.48f", M_PI); //小数点后有效位数为48位 return 0;}原创 2021-07-13 20:27:22 · 4042 阅读 · 1 评论 -
【c++基础】如何获取工程项目当前路径
#include <direct.h>#include <iostream>using namespace std;int main(){ char buffer[64]; _getcwd(buffer, 64); cout << buffer << endl; return 0;}原创 2021-05-24 11:19:39 · 513 阅读 · 0 评论 -
Visual Studio 2019无法使用pthread.h头文件问题
参考链接1:https://blog.youkuaiyun.com/helei001/article/details/38401777参考链接2:https://download.youkuaiyun.com/download/ma950924/10545742转载 2021-05-24 09:33:56 · 3611 阅读 · 0 评论 -
C++ 二维数组的定义及访问
#include<iostream>using namespace std;int main6() { //二维数组定义方式 /* 1. 数据类型 数组名[ 行数 ][ 列数 ]; 2. 数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } }; 3. 数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4}; 4. 数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4原创 2021-05-22 17:00:02 · 771 阅读 · 0 评论 -
关于 取模运算符的细节
取模的本质就是 求余数两个数相除,除数不可以为0 ,所以也做不了取模运算两个小数是不可以做取模运算的#include<iostream>using namespace std;int main2() { //取模运算本质 就是求余数 int a1 = 10; int b1 = 3; cout << a1 % b1 << endl; int a2 = 10; int b2 = 20; cout << a2 % b2 &l.原创 2021-05-22 11:38:05 · 793 阅读 · 0 评论 -
C++ 一维数组的使用
#include<iostream>using namespace std;int main1() { //数组 /* 1. 数据类型 数组名[ 数组长度 ]; 2. 数据类型 数组名[ 数组长度 ] = { 值1,值2 ...}; 3. 数据类型 数组名[ ] = { 值1,值2 ...}; */ // 1. 数据类型 数组名[ 数组长度 ]; int arr[2]; //给数组中的元素进行赋值 //数组元素的下标是从0开始索引的 arr[0]原创 2021-05-22 11:03:35 · 566 阅读 · 0 评论 -
C++中的自定义异常的简单示例
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>using namespace std;class myexception :public exception{public: myexception(string err) { this->err = err; } virtual ~myexception() {} virtual const char* what()原创 2021-05-20 20:56:40 · 453 阅读 · 0 评论