C/C++
CJ_Study_Home
嵌入式软件工程师的路上
展开
-
静态成员变量和静态成员函数
数据成员可以分静态变量、非静态变量两种:静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所...原创 2018-07-25 21:28:33 · 131 阅读 · 0 评论 -
队列
简单的写一下队列的操作。/*(1)清空队列(2)判断是否为空(3)元素的个数(4)入队列(5)出队列(6)取对头元素*/#define MAXSIZE 10typedef struct{ int data[MAXSIZE]; int front; int rear;}Squeue;//1清空队列bool clearSqueue(Squeue* q...原创 2018-07-30 21:05:01 · 270 阅读 · 0 评论 -
双向链表
双向链表的头插尾插和删除。关于链表这一块,其实很简单,只要记得操作的时候,先对新的结点操作,再操作前后。没有编译。可能有问题,仅供参考。/***************************************************************************** FileName: 双向链表.cAuthor: xx Version : ...原创 2018-07-30 21:10:27 · 109 阅读 · 0 评论 -
二叉树链表结构实现
拿一段以前老师的代码二叉树的功能/操作:1、初始化2、清空3、构建二叉树4、前、中、后序遍历二叉树5、二叉树的深度 学习二叉树的时候,非常要注意的是,形参是二级指针。前中后序遍历的递归算法,要好好理解。老师的这个代码,个人觉得好在求树的深度,这个当初自己没有想到。#include "string.h"#include "stdio.h" #i...原创 2018-07-30 21:16:27 · 2472 阅读 · 0 评论 -
跳台阶---一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目刚开始我想到的是二叉树。左1右2,后来想想非常的麻烦,然后我找寻了一下规律。f(n) = f(n - 1)+f(n - 2).采用递归或者迭代比较方便,类似斐波那契数列。class Solution {public: int jumpFloor(int number) { ...原创 2018-08-01 13:51:13 · 1730 阅读 · 0 评论 -
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
这个与上一篇是一样的思想。f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n) f(n-1) = f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n) 。所以f(n) = 2*f(n-1)。class Solution {public: int jumpFloorII(...原创 2018-08-01 14:18:26 · 1402 阅读 · 1 评论 -
快速排序---简解
快速排序是真的块。简单的说一下快排的思想:第一步,找出一个键值,通常取第一个元素,用temp中间变量暂存,left和right为排序范围的左边界和右边界。第二步、从右边找出比temp小的放入i下标的位置。i++。第三步、从i+1的位置往后找到比temp大的值放入j下标处。第四步、知道i >=j..第一次排序做好了,然后重复步骤。。排序left到j - 1,i+1 到r...原创 2018-08-10 20:54:16 · 131 阅读 · 0 评论 -
基本数据类型所占字节数
16位编译器char :1个字节char*(即指针变量): 2个字节short int : 2个字节int: 2个字节unsigned int : 2个字节float: 4个字节double: 8个字节long: 4个字节long long: 8个字节unsigned long: 4个字节32位编译器char :1个字节char*(即指针变量): 4个字...原创 2018-08-01 23:00:17 · 263 阅读 · 0 评论 -
基类指针指向派生类对象
父类子类指针函数调用注意事项1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩) 2,如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合生活习惯,在程序设计上也会给程序员带来困扰。(一般不会这么去定义) 3,如果基础类和衍生类定义了相同名称的成员函数,那么通过对象...转载 2018-08-15 11:04:41 · 12671 阅读 · 5 评论 -
八大排序算法总结
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。 算法一:插入排序 插入排序示意图插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对...原创 2018-08-13 09:03:50 · 170 阅读 · 0 评论 -
编程中设计并发服务器,使用多进程与多线程有什么区别
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?答案一:1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。两者都可以提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于...转载 2018-08-13 19:07:04 · 428 阅读 · 0 评论 -
c语言分配内存方式有哪些?c语言中常见的内存错误有哪些?
内存分配方式有三种: 1、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 3、从堆上分配,亦称动态内存分配。程序在运行的时候用m...原创 2018-08-13 20:26:24 · 605 阅读 · 0 评论 -
斐波那契
#include "stdio.h"int Fbi(int i) /* 斐波那契的递归函数 */{ if (i < 2) return i == 0 ? 0 : 1; return Fbi(i - 1) + Fbi(i - 2); /* 这里Fbi就是函数自己,等于在调用自己 */}int main(){ int i; int a[40]; printf("...原创 2018-07-24 19:48:24 · 194 阅读 · 0 评论 -
建立一个类PrimeNUM,求指定数据范围内的所有素数(质数)
1.建立一个类PrimeNUM,求指定数据范围内的所有素数(质数)。具体要求如下:(1)私有数据成员int data[25]:依次存放在指定范围内求出的所有素数。int low,high:存放指定的数据范围的下限和上限。int num:存放low与high之间的素数个数。(2)公有成员函数PrimeNUM(int _low,int _high):构造函数,用参数_low和_...原创 2018-03-30 21:40:55 · 3131 阅读 · 0 评论 -
初始化列表初始化顺序
输出结果为ab初始化列表是按类中声明变量的先后顺序来初始化,与初始化列表的顺序无关。 class Printer{ public: Printer(std::string name) {std::cout << name;}};class Container{ public: Container() : b("b"), ...原创 2018-07-23 09:15:01 · 1513 阅读 · 0 评论 -
Math.round()
题目大概是问Math.Round(11.5);和Math.Round(-11.5);返回值是多少?原来不是四舍五入这么简单,其实是四舍六入,但是五是很有讲究的。要是遇到五则取离前一位最近的偶数。比如,这条题目,11.5返回值就是12.0;-11.5返回值就是-11.0; 但是这里其实也不是这么简单:看下面的例子:Math.Round(3.44, 1); //Returns 3.4.Ma...转载 2018-07-23 08:53:10 · 182 阅读 · 0 评论 -
剑指offer-二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 从左下角开始判断,小就向上,大就向右 bool Find(int target, vector<vector<int> > array) { ...原创 2018-07-21 18:27:02 · 101 阅读 · 0 评论 -
class和struct的区别
1.c++中,class和struct的区别: a.成员访问权限->class的成员访问权限为private,而struct的成员访问权限为public b.默认的继承方式->class的默认继承方式为private,而struct的默认继承方式为public2.struct在C和C++之间的区别 a.c中,struct是用户自定义数据...原创 2018-07-20 13:01:03 · 206 阅读 · 0 评论 -
剑指offer-替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char *str,int length) { int oldLength = 0,newLength = 0;...原创 2018-07-19 19:23:47 · 138 阅读 · 0 评论 -
VC++常见错误原因解析--error LNK2019: 无法解析的外部符号 "public: void __thiscal
出现这个错误,应该首先查看“#include”语句是否包含,或者是否包含正确。符号无法解析意味着编译器知道有这个符号存在,也就是有声明,但在链接时,找不到实现代码,那么就去看看报错的这个函数有没有实现代码。如果它们的确已经有了,还是出现这个错误,就把它们重新编译一下。根据个人遇到这个错误时的记录,原因可以分为一下几种:原因一:只是在.h里面声明了某个方法,没有在cpp里面实现。具体讲,有时...转载 2018-04-17 11:08:58 · 4078 阅读 · 1 评论 -
定义一个字符串类DelSameStr,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个
定义一个字符串类DelSameStr,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个。例如,若字符串为”cocoon”,删除重复出现的字符后,其结果是字符串”con”。具体要求如下:(1)私有数据成员。char *s1:指向原字符串。char *s2:指向结果字符串。(2) 公有成员函数。DelSameStr(char *s):构造函数,动态分配s1...原创 2018-03-30 21:46:28 · 1724 阅读 · 1 评论 -
编程将一个二维数组元素变换为逆向存放
编程将一个二维数组元素变换为逆向存放,即按元素在内存中的物理排列位置,第一个元素变成倒数第一个元素,第二个元素变成倒数第二个元素,依此类推。例如,原始二维数组为,逆向存放后变为。试建立一个类REVARR,完成上述工作。具体要求如下:(1)私有数据成员int a[M][N]:初始化时存放原始二维数组,最终存放逆向存放后的二维数组。(2)公有成员函数REVARR(int x[M][...原创 2018-03-30 21:45:53 · 1600 阅读 · 0 评论 -
对一个5位数的任意整数,求出其降序数
对一个5位数的任意整数,求出其降序数。例如,整数是82319,则其降序数是98321。算法提示:将整数的各位数分解到一维整型数组a中,再将a数组中的元素按降序排序,最后输出a数组元素值。试建立一个类DescendNUM,用于完成该功能。具体要求如下:(1)私有数据成员int n:存放5位数的整数。int a[5]:存放其元素的降序排列值。(2)公有成员函数DescendNUM(...原创 2018-03-30 21:45:14 · 1405 阅读 · 0 评论 -
建立一个形状类Shape作为基类,派生出圆类Circle和矩形类Rectangle,求出面积并获取相关信息
建立一个形状类Shape作为基类,派生出圆类Circle和矩形类Rectangle,求出面积并获取相关信息。具体要求如下:(1)形状类Shape(a)保护数据成员double x,y:对于不同的形状,x和y表示不同的含义,如对于圆,x和y均表示圆的半径,而对于矩形,x表示矩形的长,y表示矩形的宽。访问权限定义为保护类型是为了能被继承下去,以便派生类能直接访问x和y。(b)公有成...原创 2018-03-30 21:44:23 · 6650 阅读 · 0 评论 -
建立一个矩阵类Matrix,存储一个4*4的矩阵并能在矩阵中查找某数
建立一个矩阵类Matrix,存储一个4*4的矩阵并能在矩阵中查找某数。要求如下:(1)私有数据成员int p[4][4]:存储一个4*4的矩阵的值。int n:矩阵的行数。int x:存储根据查找要求在矩阵中要查找到的某数。int row,col:存储该数所在的行、列值。(2)公有成员函数构造函数:初始化n的值为4,x、row、col为0。void input(in...原创 2018-03-30 21:43:23 · 1284 阅读 · 0 评论 -
建立一个类SUM,求二维数组外围各元素的和,并且输出数组各元素及所求之和
建立一个类SUM,求二维数组外围各元素的和,并且输出数组各元素及所求之和。具体要求如下:(1)私有数据成员int a[4][4]:二维数组,存放要处理的数据。int s:存放数组a外围各元素的和。(2)公有成员函数SUM(int b[4][4]):构造函数,用数组b初始化数组a。void process():求二维数组外围各元素的和s。void print():按行列方...原创 2018-03-30 21:41:48 · 2393 阅读 · 0 评论 -
什么是野指针?应该如何避免?
野指针:指向不确定地址的指针变量。(即没有初始化)使用野指针易因内存泄露出现段错误。而造成内存泄露的原因有两个:1.访问了没有权限的内存(平时我们正确使用指针的时候,系统应经将相应的内存分配给用户,但是如果指向没有分配的内存,系统会判定我们没有权限)2.访问了已经释放了的内存。因为野指针主要是因为我们平时编程习惯造成的,因此我们只能避免野指针的出现,而不能杜绝。(请注意用词)我们在编程...原创 2018-08-13 20:33:23 · 268 阅读 · 0 评论