C++
文章平均质量分 52
思泽Elly
一名转码的底层测绘人
展开
-
C++拷贝构造函数为啥不能传值
拷贝构造函数就是用一个已创建好的对象去初始化另一个对象,我们用一个案例去说明:#include <iostream>using namespace std;class example{public: example(int a)//构造函数 { this->num=a; } example(example &exp) { this->num=exp.num; } int num;};int main(){ example exp原创 2021-08-28 20:18:43 · 756 阅读 · 0 评论 -
C++中如何让函数有多个返回值
我们知道C++函数中只允许有一个返回值,那我们如何让函数有多个返回值呢?请看这样的一个例子:对于函数输入一个数组,获得该数组中最大值与最小值。1、将函数输入参数与返回值一起作为实参void max_min(int arr[],int length,int &min,int &max){ min=arr[0]; //初始化 max=arr[0]; for (int i = 0; i < length; i++) { min=min<arr[...原创 2021-08-27 21:46:50 · 3979 阅读 · 0 评论 -
(C++)静态局部,静态全局,局部、全局变量间的区别
局部变量:作用域为函数内,在进入函数中自动创建,离开函数时自动消失。简而言之就是函数中定义的变量,无法在函数外访问,且在每次函数调用时自动创建,离开函数时自动消除。void func(){ string str="abc"; //局部变量}int main(){ int a; //局部变量 double pi=3.14;//局部变量}全局变量:在函数外定义的变量,且作用域为整个项目中所有文件,意思就是main函数与子函数可以访问,除了定义全局变量的文件可以访问,项原创 2021-08-27 21:04:42 · 425 阅读 · 0 评论 -
数字字符串与int,double类型数据的转换
sstream定义了三个类:istringstream、ostringstream和stringstream分别用来进行流的输入、输出和输入输出操作。sstream经常用来进行不同类型数据间转换,使用的时候需要在头部增加#include <sstream>。#include <iostream>#include <sstream>using namespace std;int main(){ //char转double stringstr...原创 2021-08-27 16:42:23 · 431 阅读 · 0 评论 -
(C++)指针数组、数组指针、函数指针与指针函数区别
C++初学者很容易被这几个概念弄混,简而言之:指针数组:是一个数组,数组内元素为指针数组指针:是一个指针,指向一个数组指针函数:是一个函数,函数返回值为一个指针函数指针:是一个指针,指向一个函数下面我们再看看具体定义与内容:1、指针数组int arr_value[3];int *arr_p;int *arr[3];我们知道第一行第二行代码分别是定义数组与指针,那第三行是是定义啥?这就涉及到C++中运算符优先级的问题了,arr先与[]结合那它就是数组,...原创 2021-08-27 12:44:54 · 1258 阅读 · 0 评论 -
常见的几种排序(C++)
排序经常需要用到交换函数,其代码为://交换函数void swap(int* a,int* b){ int temp=*a; *a=*b; *b=temp;}1、冒泡排序//冒泡排序void bubble_sort(int arr[],int length){ for (int i = 0; i < length-1; i++) { for (int j = 0; j < length-i-1; j++) { if (arr[j]>arr[原创 2021-08-24 11:05:03 · 889 阅读 · 2 评论 -
C++实现二叉树的非递归遍历
在前面C++实现二叉树的递归遍历(详细步骤与代码实现)我们实现二叉树通过递归遍历实现了先序、中序与后续遍历,那么如何通过非递归遍历实现先序、中序与后续遍历呢?我们先看看非递归遍历规则。还是同样的二叉树1、首先将二叉树根节点A放入栈中,并将节点是否打印标签设为false。2、再将节点A从栈中弹出,将其左右子树节点BF入栈,打印标签设为false,将A再次入栈,此时是否打印的标签设为true(注意这里三个节点入栈顺序与先序、中序与后续遍历方式有关,入栈顺序与遍历顺序正好相反,...原创 2021-08-23 12:05:24 · 1797 阅读 · 2 评论 -
C++中int与char指针数组、数组指针差别
我们首先弄清楚指针数组与数组指针的概念。指针数组:指针数组是一个数组,只不过数组里面元素全是指针 int* p[3]; int num[3]={1,2,3}; for (int i = 0; i < 3; i++) { p[i]=&num[i]; cout<<p[i]<<endl; }这里的p[3]就是指针数组,里面存储三个指向int型的指针。数组指针:数组指针是一个指针,指针指向某个数组的首地址 int num[3]={.原创 2021-08-22 21:04:21 · 2722 阅读 · 0 评论 -
C++栈的应用——后缀表达式求解
在前面“C++栈的应用——中缀转后缀”我们将我们所熟知的中缀表达式转为后缀表达式,那么如何通过后缀表达式获得原表达式的值呢?将后缀表达式:“2963/+5-*4+”从左往右逐个字符进行遍历获得操作符,同时建立一个空栈stack。一、当操作符为数字时,直接入栈。二、当操作符为运算符时,取栈顶数字做右计算数值并弹出,再取一个栈顶数字做左计算数值并弹出。其与运算符做四则运算,结果入栈。三、当遍历完成后,从栈中弹出唯一数字,该数字就是这个后缀表达式运算结果。下面提...原创 2021-08-22 19:32:10 · 1411 阅读 · 0 评论 -
求二叉树叶子数与高度(C++)
我们首先来看一看二叉树中叶子数与高度的定义:叶子数:对于一个二叉树的节点,若其既没有左子树又没有右子树,那它就是叶子节点。整个二叉树的叶子数为所有叶子节点个数。高度:二叉树高度又称深度,其为根节点到叶子节点路径的最大值。下面提供实现代码:#include <iostream>using namespace std;//定义二叉树节点class binarynode{public: char data; //节点数据域 binarynode* lchild原创 2021-08-22 10:17:08 · 3084 阅读 · 1 评论 -
C++中指针、地址、内存与字节的关系
想必大家在刚开始学习C++时,经常会听到指针、地址、内存与字节的概念,但对于初学者,一个指针就理解的磕磕盼盼,很难分清上面几个概念的区别。下面给各位C++小萌新分享一下我对这几个概念的理解,可能不够专业,但一定能够帮助你对这几个概念的理解。1、字节大家在学刚学习C++时,一定见过这样的图表数据类型 占用空间 short(短整型) 2字节 int(整型) 4字节 long(长整型) 4字节 long long (长长整型) 8字节...原创 2021-08-21 18:50:51 · 5745 阅读 · 11 评论 -
C++实现二叉树的递归遍历(详细步骤与代码实现)
我们知道数据的存储结构分为线性与非线性。线性就是1对1的结构,像栈与队列都属于线性结构。那什么是非线性的结构呢?非线性即1对n的结构这更符合常规情况,线性结构本质上属于非线性结构中的一种特殊形式,像树就属于非线性结构。但是树并不适合编码操作,需要将其转为二叉树,既然二叉树是一种数据存储的结构,那就涉及到数据遍历的问题。有关二叉树的遍历有三种方式,即先序遍历、中序遍历与后续遍历。下面就根据上面的二叉树简单谈一下何为先序遍历、中序遍历与后序遍历:1、先序遍历(DLR) ...原创 2021-08-20 19:12:55 · 4604 阅读 · 1 评论 -
C++栈的应用——中缀转后缀
中缀表达式就是我们平时运算表达式,其特点是运算符总是处于两个运算对象之间。但是该表达式计算机处理起来较为麻烦,会将其转写成后缀表达式,后缀表达式也叫逆波兰表达式,后缀表达式的特点是每个运算符都置于两个运算对象之后。那么中缀表达式如何转为后缀表达式呢?将中缀表达式:“2*(9+6/3-5)+4”从左往右逐个字符进行遍历获得操作符,同时建立一个空栈stack。一、当操作符为数字时,直接打印输出二、当操作符为左括号时,将其存储到栈stack中成为元素符三、当操作...原创 2021-08-20 15:37:01 · 1166 阅读 · 0 评论 -
C++实现队列的顺序存储与链式存储
队列是一种特殊的数据存储结构,与栈不同的是(C++实现栈的顺序存储与链式存储),其数据存储与访问顺序为先进先出,形式如下:下面附上队列顺序存储与链式存储的实现代码:1、顺序存储#include <iostream>using namespace std;const int max_size=1024;//定义队列class seqqueue{public: void* data[max_size]; int size;};//初始化队列se...原创 2021-08-19 17:10:47 · 1246 阅读 · 0 评论 -
C++实现栈的顺序存储与链式存储
栈是一种特殊的数据结构,栈中数据先进后出,且栈中数据只能从头部出栈,能直接访问的数据也仅为栈的头部数据,要想访问下面的数据则需要将前面的数据逐个出栈后才可访问。下面通过一个word撤销的案例来解释:我们用word写paper时,首先需要创建一个空白文档(即一个空栈),然后对这个空白文档进行一系列操作每个操作都是一个新的version,即数据存储压栈的操作。但是paper写完后(version4),我们发现写的paper有问题需要修改,想要回到version1,这就...原创 2021-08-19 11:13:28 · 1363 阅读 · 0 评论 -
C++实现企业链表
企业链表是企业中经常使用的一种链表,因此被称为企业链表。我们首先来看看他的结构与传统结构有啥不同:对于一个类或结构体 ,其中包含我们需要存储的数据data与一个指针变量p_next,我们将p_next串起来便形成了企业链表,那它和普通链表有何区别呢?普通链表中p_next指向的是下一个p_next与data组成的类或结构体整体的地址,而企业链表p_next仅仅指向下一个p_next的地址。因此链表中并涉及任何data数据,企业链表实际存储的数据结构为:理论说...原创 2021-08-18 10:55:33 · 1177 阅读 · 2 评论 -
C++指针偏移在类中的应用
我们知道通过指针访问数据时,并不是依据变量名,而是依据变量内存地址与指针的偏移量大小,具体介绍见https://blog.csdn.net/qq_41696018/article/details/119764140。现在我们看一个例子,有两个类people与animal:class people{public: int age_p; double weight_p; double height_p;};class a...原创 2021-08-17 20:56:29 · 630 阅读 · 0 评论 -
C++指针偏移原理
在C++中我们可以通过指针方便的访问各种类型数据,但我们都知道指针只是一个头地址,而我们需要遍历的数据通常占有大量的空间,那么指针是如何遍历其中的数据呢?这就涉及到指针偏移的一个问题,下面我们看个例子:这里使用了十进制显示地址函数ip2decimal()。详情见https://blog.csdn.net/qq_41696018/article/details/119749826?spm=1001.2014.3001.5501 int a[4]={1,2,3,4}; int* p=...原创 2021-08-17 20:23:35 · 3265 阅读 · 0 评论 -
C++中类与结构体所占内存分析
我们知道C++中不同类型数据占不同字节的,具体见下表:数据类型 32位 64位 char 1 1 int 4 4 float 4 8 double 8 8 那么对于一个结构体或类占多少字节呢?我们首先定义一个类:class people{public: int age_p; double weight_p; char name[5];};机灵的小伙伴可能一口说出这个类所占的字节...原创 2021-08-17 12:56:33 · 1094 阅读 · 1 评论 -
C++显示十进制内存地址(无需理解,拷贝即用)
我们在C++中显示变量地址均为十六进制的,不具有直观性,尤其在分析连续存储的变量内存地址时。下面分享一个可将十六进制地址转为十进制地址显示的代码,需要注意的是,需要在文件头包含sstream与string。#include <iostream>#include <sstream>#include <string>using namespace std;int ip2decimal(void* ip){ stringstream str...原创 2021-08-17 10:20:46 · 2942 阅读 · 3 评论 -
单向循环链表解决约瑟夫问题(C++)
在大厂面试时,经常会被提出实现约瑟夫问题。那么什么事约瑟夫问题呢?约瑟夫问题:n个人围成一个圆圈,分别编号1~n,从第一个人开始顺时针报数为1,报到第m的时候。令其出列,然后再从下一个人重新开始报数,当从1报到m时,报m的人继续出列,以此重复下去,直到所有人都出列为止,求出列的序号。当m=8,n=3时,删除序列如下所示:最终删除的序列为:3、6、1、5、2、8、4、7。C++中有一种数据存储结构与这种首尾相连的环形结构极为相似——单向...原创 2021-08-16 16:11:54 · 6942 阅读 · 3 评论 -
C++单向循环链表实现
单向循环链表与单向链表十分相似,具有关单向链表详细理论与实现过程可见上一篇文章https://blog.csdn.net/qq_41696018/article/details/119705003。实际上单向循环链表与单向链表仅仅有尾部node指针域指向不同的差别,对于单向链表尾部node由于没有后续node,其指针域需指向NULL。而单向循环链表将尾部node的指针域指向头部node,首位相连构成单向循环链表,具体形式为:具体实现代码为:1、链表定义//定义节点class...原创 2021-08-15 20:03:02 · 2874 阅读 · 1 评论 -
年月日、年积日、简化儒略日、GPS周之间相互转换(C++)
在学习GNSS过程中,不管是数据下载又或是不同文件名中时间的匹配,经常会遇到需要在不同时间之间转换,笔者在此归纳了几种经常会遇到的时间转换:1、年月日转年积日 3、年积日转简化儒略日 5、简化儒略日转GPS周2、年积日转年月日 4、简化儒略日转年积日 6、GPS周转简化儒略日笔者在此同时分享一个小软件,用于帮助大家检验通过代码转换的结果:链接:h...原创 2021-08-12 16:25:26 · 8268 阅读 · 2 评论 -
矩阵基本运算(C++)
闲着没事,将以前利用C++实现的矩阵各种运算整理了一下,分享一下,矩阵运算包括:1、二维矩阵创建6、两矩阵上下叠加2、两矩阵相加 7、矩阵左右叠加3、两矩阵相减 8、矩阵转置4、两矩阵相乘 ...原创 2021-08-11 17:18:42 · 29128 阅读 · 8 评论 -
创建动态二维数组(C++)
方法1:使用vector 容器#include <iostream>#include <vector>using namespace std;int main(){ //创建arr[4][3]并赋初值0 vector<int> a(3,0); vector<vector<int>> arr; for (int i = 0; i < 4; i++) { arr.push_back(a); }原创 2021-08-13 20:09:33 · 1042 阅读 · 2 评论 -
按3倍中误差去除粗差(C++)
在测量工作中,通常采用中误差做为衡量精度的指标,而中误差不是代表观测误差的大小,而是代表观测误差分布的离散程度。中误差较小代表离散度比较小,中误差较大代表离散度较大。 因此在实际测量中,将三倍中误差作为极限误差,大于该值的观测值将作为粗差进行剔除。现在举例说明:有一个木棍,我们不知道其真实长度,对其n次观测获得观测值[L1、L2、L3......Ln,但观测结果不可避免受到外界或人为因素影响导观测误差,要想获得“干净”的观测值,就必须得去除其中误差较大的观测值,按照三倍中误差就是一种...原创 2021-08-11 12:11:29 · 2344 阅读 · 2 评论 -
最详细的C++单向链表实现
链表是数据结构中常见的一种数据存储形式,其在物理存储单元上是非连续的存储结构,即其数据存储的空间并非连续的内存空间。这种存储方式的优点是可以动态分配内存空间,不会造成内存的浪费和溢出,同时链表对于执行插入、删除等操作十分简便,不需要移动大量元素,但是其相对于连续空间存储的数据相比,遍历速度较慢。1、那么链表到底长啥样呢?链表由多个node(节点)组成,每个节点中由两部分结构组成,data中存储需要存储的数据,next为一个指针,其指向下一个node的地址。当...原创 2021-08-15 10:27:05 · 15809 阅读 · 24 评论