C++
文章平均质量分 61
Jacob-xyb
python 爱好者
展开
-
C++ 入门小项目:002_职工管理系统
职工管理系统主要练习的技能是:C++三大特性之一:多态管理系统需求职工管理系统可以用来管理公司内所有员工的信息本教程主要利用C++来实现一个基于多态的职工管理系统公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责普通员工职责:完成经理交给的任务经理职责:完成老板交给的任务,并下发任务给员工老板职责:管理公司所有事务管理系统中需要实现的功能如下:退出管理程序:退出当前管理系统增加职工信息:实现批量添加职工功能,将信息录入到文件中,职原创 2021-10-19 10:06:10 · 270 阅读 · 0 评论 -
C++进阶笔记之vector:删除指定元素
使用迭代器it和vector.erase(it)实现/*- delete element -*/void vector_delete_element(){ //只使用vector的erase函数,记住,该函数是迭代器失效,返回下一个迭代器。 vector<int> arr; arr = { 1,2,3,4,5 }; vector<int>::iterator it; for (it = arr.begin(); it != arr.e.原创 2021-10-12 14:06:07 · 318 阅读 · 0 评论 -
C++冷知识之(一):二维向量的内存空间是不连续的
std::vector<std::vector<double>> res(row, std::vector<double>(col)); for (int i = 0; i < row*col; i++) { if (&res[i][0] == &res[0][0] + i) { std::cout << "True" << std::endl; } else { std::cout <<.原创 2021-09-30 14:59:43 · 1099 阅读 · 0 评论 -
C++之 Eigen-3.4.0 全方位教程:Chapter04-操作篇
块操作块操作既可以作为右值,还可以作为左值!基本操作Block operationdynamic-size block expressionfixed-size block expressionBlock of size (p,q), starting at (i,j)matrix.block(i,j,p,q);matrix.block<p,q>(i,j);两个版本都可用于固定大小和动态大小的矩阵和数组。这两个表达式在语义上是等价的。唯一的区别是,如果块大原创 2021-09-14 15:03:08 · 1179 阅读 · 0 评论 -
C++之 Eigen-3.4.0 全方位教程:Chapter03-数组篇
数组(The Array class)数组是比较通用的类,不像矩阵专注于线性代数。此外,Array类提供了一种简单的方法来执行系数操作,这可能没有线性代数含义,例如向数组中的每个系数添加一个常数或将两个数组按系数相乘。数组类型Array是一个类模板,它采用与Matrix相同的模板参数。与Matrix 一样,前三个模板参数是必需的:Array<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>后面三个参数和矩阵类原创 2021-09-10 17:48:13 · 1059 阅读 · 1 评论 -
C++之 Eigen-3.4.0 常用函数速查表
速查表#include "../第三方库测试.h"//template + using 自定义数据类型template<typename T>using Mat2 = Matrix<T, 2, 2>;void Eigen_QuickCheck_001(){ Mat2<int> m1; m1 << 1, 1, 1, 1; cout << "m1:" << endl <<m1 << endl;原创 2021-09-02 11:36:07 · 966 阅读 · 0 评论 -
C++之 Eigen-3.4.0 全方位教程:Chapter02-矩阵篇
矩阵类(The Matrix class)在Eigen 中,所有矩阵和向量都是Matrix模板类的对象。向量只是矩阵的一种特殊情况,具有 1 行或 1 列。Matrix的前三个模板参数该矩阵类需要六个模板参数,但是现在了解前三个参数已经足够了。剩下的三个参数有默认值,现在我们将保持不变,我们将在下面讨论。Matrix的三个强制性模板参数是:Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime>Sc原创 2021-08-30 16:52:25 · 1755 阅读 · 0 评论 -
C++之 Eigen-3.4.0 全方位教程:Chapter01-入门篇
入门篇Eigen官网Eigen官方文档对于一个优质第三库最好的入门学习方式就是去读官方文档。速查头文件检索Array, matrix and vector types简介Eigen是C++中可以用来调用并进行矩阵计算的一个库,简单了说它就是一个c++版本的matlab包。Eigen是一个开源库,从3.1.1版本开始遵从MPL2许可。快速参考页面(quick reference pages)以非常简洁的格式提供非常完整的 API 描述,目前只有两个功能集:矩阵和数组操作线性原创 2021-08-29 23:39:21 · 4291 阅读 · 1 评论 -
C++进阶笔记之Eigen:存储顺序(Storage orders)
C++进阶笔记之Eigen:存储顺序(Storage orders)Matrix类模板有六个模板参数,其中三个是强制性的(Scalar,RowsAtCompileTime和ColsAtCompileTime)和三个是可选的(Options,MaxRowsAtCompileTime和MaxColsAtCompileTime)。Option 就是来指定Eigen矩阵或数组存放的方式,接下来依据官方文档来详解Eigen的存储顺序。概要矩阵和二维数组有两种不同的存储顺序:列优先和行优先。本文介绍了这些存储原创 2021-08-27 14:13:21 · 1168 阅读 · 0 评论 -
C++ const 修饰指针的三种情况
const修饰指针有三种情况const修饰指针 – 常量指针const修饰常量 – 指针常量const既修饰指针,又修饰常量const修饰指针 – 常量指针int a = 10; int b = 20;const int * p = &a; // 常量指针特点: 指针的指向可以修改,但是指针指向的值不可以修改。// 指针的指向可以修改p = &b; // 正确写法// 指针指向的值不可以修改*p = 20; // 错误写法;不能修改指向的值const修原创 2021-08-26 14:50:08 · 154 阅读 · 0 评论 -
Windows下 int 和 long 数据类型为什么都占4个字节
Windows下 int 和 long 数据类型为什么都占4个字节如果你测试过long和int内置类型的大小,当发现都为4字节时,可能都会产生疑问,如果都是4字节,long并没有提供更大的存储范围,那么还要long做什么用?本文如下内容将为你解开这些疑团。先简要概述以下内置类型的发展,如有疏漏,还请指正。C语言开始时只有char(8位)和int(16位)两种,后来随着发展又加入了short(16位)和long(32位),此时,int可以是16位或者32位,依赖于平台和后续的兼容性。再后来当64位出现时,原创 2021-08-25 14:19:51 · 3787 阅读 · 0 评论 -
C++中vector的 = 与 assign 详解
c++中vector的 = 与 assign 详解两个都是赋值操作,结论是均是深拷贝,直接看代码先研究 较大空间 = 较小空间 时的结果vector<int> v1(1, 5);vector<int> v2(2, 6);vector<int> v3(3, 7);vector<int> v4(4, 8);cout << "v1.addr: " << &v1 << "\nv2.addr: " &原创 2021-08-24 17:26:54 · 2387 阅读 · 1 评论 -
C++ sort() 排序详解:快速排序、插入排序
sort()原理解析基本介绍在很多应用中,排序都是至关重要的,而且很多STL算法也只适用于有序对象序列。定义在 algorithm 头文件中的函数模板 sort<Iter>() 默认会将元素段排成升序,这也就意味着排序的对象的类型需要支持 < 运算符。对象也必须是可交换的,这说明可以用定义在 utility 头文件中的函数模板 swap() 来对两个对象进行交换。这进一步表明这种对象的类型需要实现移动构造函数和移动赋值运算符。函数模板 sort<Iter>() 的类型参原创 2021-08-20 13:35:03 · 1790 阅读 · 0 评论 -
C++入门小案例_022:初识递归
所有的递归算法都可以总结为三步递归算法必须有一个基本结束条件(最小规模问题的直接解决)递归算法必须能改变状态向基本结束条件演进(减小问题规模)递归算法必须调用自身(解决减小了规模的相同问题)案例:计算 n!#include <iostream>using namespace std;int factorial(int n){ //最小规模问题 if (n <= 1) return 1; //0!=1 //减小规模问题,调用自身 // n! = n*(n.原创 2021-08-19 11:38:26 · 65 阅读 · 0 评论 -
C++ 万能转换函数:不限string转double,也不限double转string
还在为C++中各种类型转换而苦恼吗?下列是一个万能转换函数,可以根据接受的数据类型来进行转换,非常非常方便!template<class T = std::string, class U>T to(U a) { std::stringstream ss; T ret; ss << a; ss >> ret; return ret; }用法:随便用(默认了string,非string需要自己写一下转换的类型)std::string st.原创 2021-08-17 23:00:45 · 249 阅读 · 0 评论 -
真正理解C++中数组名和指针之间的关系
前言自己琢磨问题的时候更喜欢在代码里面写记录,反而不喜欢在MarkDown记录,每次会将完整版源码放在最后,其实源码前面的内容我也不是很想写C++中的数组随手写了,可能有概念上的错误,大多也是大白话,毕竟自己也是小白,说不了多么高大尚的话语,通俗易懂就是最好的。数组数组:是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。它可以存储一个固定大小的相同类型元素的顺序集合。一维数组的声明方式:// 1.使用未初始化的内存,不会补0type arrayName [ arrayS原创 2021-08-06 14:54:59 · 614 阅读 · 0 评论 -
C++进阶笔记之STL:vector
vector容器vector基本概念最常用的数据类型之一功能:vector数据结构和数组非常相似,也称为 单端数组与数组的区别:数组是静态空间,而vector可以 动态扩展动态扩展:并不是在原空间之后续接空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间vector容器的迭代器是支持随机访问的迭代器vector构造函数函数原型:vector<T> v; // 采用模板实现类实现,默认构造函数vector(v.begin(),v.end(原创 2021-08-05 15:22:05 · 313 阅读 · 0 评论 -
C++进阶笔记之STL:string
string容器string基本概念本质:string是C++风格的字符串,而string本质上是一个类string 和 char* 的区别:char* 是一个指针string是一个类,类内部封装了 char*,管理这个字符串,是一个char*型的容器特点:string类内部封装了很多成员方法例如:find, copy, delete, replace, insertstring管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责string构造原创 2021-08-04 13:53:13 · 93 阅读 · 0 评论 -
C++进阶笔记001:static 静态生存期 和 动态生存期
简介生存期 :即从诞生到消失的时间段,在生存期内,对象的值保持不变,直到被改变为止。对象生存期分为 静态生存期 和 动态生存期 两种。静态和动态 生存期静态生存期:指对象的生存期与程序运行期相同。动态生存期:可理解为局部对象,诞生于声明点,结束于块执行完毕。在 namespace 中声明的对象都具有静态生存期,被称为常量。在函数内部作用域声明的对象具有的都是动态生存期。函数 静态对象函数内部创建静态对象如果用 static 修饰,如 static int a,这个 a 变量就会具有原创 2021-08-02 14:33:42 · 1680 阅读 · 0 评论 -
C++入门小案例_019:最小公倍数
C++入门小案例_019:最小公倍数主要思路最小公倍数 = (两数相乘) / 最大公因数全部源码/*encoding: GB2312(936)*/#include <iostream>using namespace std;void findCommonMultiple(){ int n1, n2, hcf, temp, lcm; cout << "输入两个数: "; cin >> n1 >> n2;原创 2021-07-29 17:18:58 · 105 阅读 · 0 评论 -
C++入门小案例_018:最大公约数
最大公约数基本概念最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。与最大公约数相对应的概念是最小公倍数,a,b的最小公倍数记为[a,b]。求解方法质因数分解法这种方法不适用于编程方法概念:把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就原创 2021-07-29 15:30:52 · 376 阅读 · 0 评论 -
C++入门小案例_015:判断是否为如闰年
闰年闰年是历法中的名词,分为普通闰年和世纪闰年。注意闰年(公历中的名词)和闰月(农历中的名词)并没有直接的关联,公历只分闰年和平年,平年有365天,闰年有366天(2月中多一天);平年中也可能有闰月(如2017年是平年,农历有闰月,闰六月)。基本解释凡阳历中有闰日(2月29日)的年份,闰余(岁余置闰。阴历每年与回归年相比所差的时日)。1582年以来的置闰规则:普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。世纪闰年:公历年份是整百数的,必须原创 2021-07-28 19:35:54 · 263 阅读 · 0 评论 -
C++ 入门小项目:001_通讯录管理系统
通讯录管理系统系统需求通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++实现一个通讯录管理系统系统中需要实现的功能如下:添加联系人:向通讯录中添加新人,信息包括(姓名,性别,年龄,联系电话,家庭住址)最多记录1000人显示联系人:显示通讯录中所有联系人信息删除联系人:按照姓名进行删除指定联系人查找联系人:按照姓名查看指定联系人信息修改联系人:按照姓名重新修改指定联系人清空联系人:清空通讯录中所有信息退出通讯录:退出当前使用的通讯录菜单功能功能描述如下图实现步骤原创 2021-07-28 13:58:53 · 173 阅读 · 0 评论 -
vscode 如何设置默认编码方式打开文件
vscode 如何设置默认编码方式打开文件vscode写C++真的太难太难了,因此还是以 Visual Studio 为C++的主力生产力比较好,比较vscode只是一个编辑器。既然 Visual Studio 这么喜欢 GBK 编码方式,那就用这个编码方式,将 vscode 的默认打开方式改一改就好了。直接在 setting.json 中添加以下配置: "[cpp]": { "files.encoding": "gbk" }, "[c]": {原创 2021-07-26 17:36:37 · 2915 阅读 · 0 评论 -
C++ 在 windows vscode 上使用 utf-8
C++ 在 windows 上使用 utf-8老样子,不想看吐槽的直接看总结,然后右转;坚持看完的请点个赞让我知道你看完了~Thanks.目的是实现cpp代码全平台统一解释一下why,因为unix我改变不了它!!!反观visual studio因为莫名的强大,gbk和utf-8均可拿下,但是Windows上的vscode只能运行gbk,现在只需要让vscode灵活起来就OK了。百度千篇一律的复制粘贴我不忍想吐槽一下,那些复制粘贴的大佬,你们真的试验成功了吗?fu*k,熬了一个夜,无限的下翻百度,原创 2021-07-21 10:57:29 · 1159 阅读 · 7 评论 -
解决 VSCode 终端中运行 C++ 中文乱码
解决 VSCode 终端中运行 C++ 中文乱码情景描述visual studio (简称 vs)中的文件是默认用gbk格式编写的,但是vscode是默认utf-8编写的,问题来了,我将VS的文件放在vscode里面运行,中文是会乱码的,不仅是文本显示中文乱码,终端运行结果也会乱码,将vscode改为gbk模式就不会乱码了,这也验证了网上的一些言论是对的,证明中文乱码是由于Windows终端默认gbk编码引起的,你敢改Windows的默认编码方式吗?我不敢,我劝大家也别改,理由如下:如果更改终端的原创 2021-07-20 19:20:49 · 1500 阅读 · 0 评论