
C++语言
zhangzhi2ma
这个作者很懒,什么都没留下…
展开
-
C内存的补充理解
前述,对C++内存的管理存在一些疑问,今天偶然聊到,BSS段,DATA段,这些,有了新的理解。linux下size命令可以查看程序的内存分配,分为text,BSS,DATA三个区,不包括堆栈区,可能是堆栈区运行的时候分配吧。BSS(Block Started by Symbol),存放程序未初始化的全局变量/静态变量,初始化为0,包括在main外声明的全局变量,int a,静态变量,sta...原创 2018-09-15 16:07:28 · 205 阅读 · 0 评论 -
计数排序
前面排序是通过比较排序,下界就是O(nlogn)计数排序用另外的临时空间,通过运算进行排序,可以达到线性时间O(n)大体思路是:找到最大的数max,申请临时空间c[max+1](包括0),然后遍历一次a,根据a数组的内容在c数组中记录该数出现的次数,(a数组的内容就是c的索引,如此计数),然后c再处理一次,累计,最后倒着开始,把a数组中每个元素,根据在c里面记录的顺序,填充到输出b数组里面...原创 2018-09-10 11:04:50 · 129 阅读 · 0 评论 -
堆数据结构的模板类_类的创建需要注意的地方
完成一个之前堆数据结构的模板类,关于类的创建需要注意的:默认构造函数,没有声明编译器会自动创建,创建类的时候调用默认构造函数。默认构造函数可以使带默认参数的。 析构函数,没有声明编译器会自动创建,对动态分配来说会造成内存泄漏等问题 复制构造函数,类作为函数参数(按值传递)的时候会新建临时副本,就需要调用复制构造函数,之后还会调用析构函数,就会产生问题,复制构造会单纯复制非静态成员(也就是动...原创 2018-09-10 10:37:04 · 216 阅读 · 0 评论 -
堆数据结构与堆排序
堆数据结构堆(二叉堆)是近似的完全二叉树,最底层允许不满,堆的相关,数组长度length,heap_size有效长度(堆的有效元素,未排序的数目)。Heap_size<length堆虽然很像二叉树,但是我的理解就是用二叉树的逻辑,但是最主要的区别在,堆的存储是用数组,只是用下标来帮助理解堆的存储结构从上往下,按顺序存储。然后是几个相关的操作,1、取父节点,取左...原创 2018-09-10 10:04:05 · 613 阅读 · 0 评论 -
随机数产生与数组随机化
随机数产生与数组随机化,的方法//随机数产生与数组随机化#include <iostream>#include <stdlib.h> #include <time.h>using namespace std;void Swap(int & a,int & b);void RandomInPlace(int a[],int n);...原创 2018-09-10 09:36:10 · 245 阅读 · 0 评论 -
pthread多线程的练习
pthread库进行多线程编程pthread库的函数:1、pthread_create(),创建线程原型int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg);返回值:0代表创建成功,否则是错误号...原创 2018-09-12 16:06:23 · 414 阅读 · 0 评论 -
二分法,最大子数组问题(分治法)
二分法简单,从排好序的数组里找数。时间复杂度就是O(logn)//二分法查找#include <iostream>#define N 100using namespace std;inline void Swap(int &a,int &b);void FastSort(int a[],int left, int right);bool Find...原创 2018-09-09 18:34:56 · 563 阅读 · 0 评论 -
快速排序,归并排序
快速排序是原址排序思路是,找一个参考元素,然后把小于参考元素的放左边,大于参考元素的放右边。再递归调用。再进行之前可以先把数组随机化一次,可以达到平均时间复杂度O(nlogn)这里有两种思路:一开始是,对数组a[left,,,right],参考元素选right(或left),然后i从left位置开始,向右搜索,找到小于参考元素reference的数,index记录当前插空的位置,把...原创 2018-09-09 16:40:18 · 887 阅读 · 0 评论 -
插入排序,选择排序
插入算法,类似打扑克的摸手牌,手上已有的是假设已排序的,新来的找到自己的位置,其他的给新来的腾个位置动一下窝,算法复杂度是O(n平方)选择算法,每次都遍历一下找到最小的,然后按顺序放进去。算法复杂度我觉得也是O(n平方),,//插入排序与选择排序#include <iostream>#include <stdlib.h> #include <tim...原创 2018-09-09 15:31:02 · 143 阅读 · 0 评论 -
获得顺序统计量的选择算法(数组中第i顺序的元素)
假设数组是互异的,选择算法获得数组中的顺序统计量,期望时间为O(n),最坏时间为O(n平方)算法有一些与快速排序相似,对数组选定参考元素左右分类以后,左边是小于参考元素reference的,右边是大于reference的,然后检查一下reference的位置,是i就对了,不是i就递归调用。同样可以通过数组随机重排来达到平均期望时间 //获得顺序统计量的选择算法#include <...原创 2018-09-10 14:34:36 · 788 阅读 · 0 评论 -
栈数据结构的模板类
栈数据结构的类;栈就是先入后出,//栈模板类#include <iostream>#include <string.h>#include <assert.h>using namespace std;template <class Type>class stack_class{ private: int max_len;//...原创 2018-09-10 14:39:42 · 312 阅读 · 0 评论 -
贪心算法——活动选择
贪心算法,选择局部最优解活动选择问题,每个活动有开始时间s,结束时间f,找到最大兼容活动集。假设f按照大小顺序排好。每次就从当前结束时间往后选最近的开始时间的活动#include <iostream>#include <map>#include <vector>using namespace std;//void ActivitySel...原创 2018-09-11 11:09:35 · 1016 阅读 · 0 评论 -
最长回文子序列
最长回文子序列:输入字符串的最长的回文子序列,例如输入 character,最长回文子序列是carac,是子序列,不是子串,从这个角度看,感觉跟前面的例子里,最长公共子序列很类似,借鉴那里的递归式:d[I,j]之间的最长回文子序列,如果I,j字符相同,回文子序列长度就等于d[i+1,j-1]+1,容易理解。如果I,j字符不同,回文子序列长度就等于max(d[i+1,j],d[I,j-1...原创 2018-09-11 10:53:33 · 1029 阅读 · 0 评论 -
动态规划_钢条切割问题
动态规划的问题其实本质还是一种递归问题的优化,针对某一些递归问题,自上而下的求解会重复求解子问题的情况,(利用子问题图来发现这种情况),采用动态规划的方法解决这样的问题。一方面,通过对子问题进行记录备份,需要的时候查找,另一方面,采用自下而上的求解策略,对大规模的问题,首先求解每一个它要用到的小规模问题的解,然后记录,一路向上求解得到大规模问题。 钢条切割成小段以后,进行出售,不同...原创 2018-09-11 10:47:15 · 405 阅读 · 0 评论 -
内存管理大小端查看(union结构)
查看内存管理是大端还是小端,使用union结构,union结构是里面的各个数据共用一个内存//大小端查看#include <iostream>using namespace std;union un{ short int s; char c[sizeof(short int)];}; int main(){ un test; test.s=0x0102; ...原创 2018-09-11 09:59:54 · 256 阅读 · 0 评论 -
红黑树的模板类(发现了之前没留卫星数据模板,,)_枚举类型(总忘叫enum)
如题,,红黑树实现前头学习了容器的使用,发现了之前写的没加卫星数据的问题。改进了//红黑树,有卫星数据#include <iostream>using namespace std;enum Color{ red,black}; template <class Key ,class Type>struct node{ Key key; Type ...原创 2018-09-10 15:03:53 · 158 阅读 · 0 评论 -
二叉树的模板类
同样的问题,当时忘了卫星数据的模板了//二叉树的模板类#include <iostream>using namespace std;template <class Type>struct node{ Type value; node<Type> *left; node<Type> *right; node<Type&g...原创 2018-09-10 14:59:11 · 651 阅读 · 1 评论 -
unordered_map(哈希表)与map(红黑树)容器的方法记录
//unordered_map的方法记录#include <iostream>#include <unordered_map>#include <map>using namespace std;int main(){ unordered_map<int,string> test;//声明 test.insert(make_p...原创 2018-09-10 14:57:36 · 425 阅读 · 0 评论 -
链表数据结构的模板类
//链表数据结构的模板类#include <iostream>#include <assert.h>using namespace std;#define N 10template <class Type>struct node{ Type value; node<Type> *next; node<Type> *p...原创 2018-09-10 14:48:30 · 242 阅读 · 0 评论 -
欧拉题10,11,12,15,16——15分治,16字符加法乘法
欧拉题10The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.Find the sum of all the primes below two million.2000000以下素数的和//2000000以下素数的和#include <iostream>using namespace std;inlin...原创 2018-09-09 11:34:35 · 213 阅读 · 0 评论 -
我的opencv慢慢学习小笔记(一)
Mat imageIO;临近放寒假,下周回家,这两天没事先开始慢慢学一些opencv的知识,第一篇小笔记开始:结合师兄的opencv的书跟自己搜来的知识,总结以下知识点:1.回顾了一下C++中的命名空间的问题,主要作用是工程中,防止多人定义相同的类,导致的编译的问题,使用命名空间namespace ns1 //声明命名空间ns1{ class Student //在命名空间nsl内声...原创 2018-01-13 17:42:31 · 260 阅读 · 0 评论 -
makefile以及用gcc进行C编译
C编译过程:预处理 .c -> .i汇编 .i -> .s编译 .s -> .o链接 .0 -> 可执行文件 gcc编译器:gcc [选项] [文件名]选项包括: 假设源程序文件名为test.c。1. 无选项编译链接用法:#gcc test.c作用:将test.c预处理、汇编、编译并链接形成可执行文件...原创 2018-03-21 11:49:39 · 6004 阅读 · 1 评论 -
指针数组与数组指针,局部数组声明与指针声明的内存上的不同之处
char a[5] = {'a','A','c','C','d'}; //cout<<a<<endl; printf("a=%d\n",a); //cout<<&a<<endl; printf("&a=%d\n",a); //cout<<*(a+1)<<e原创 2018-09-05 19:26:56 · 468 阅读 · 0 评论 -
C++中指针的引用——在函数中改变指针的值+linux下C++程序送入参数
问题的原因是,在对地址进行map的时候,发现封到函数中,不能改变地址的值,void BaseVirtMap(unsigned int *map_base,unsigned int *virt_addr){ int dev_mem_fd; if( ( dev_mem_fd = open( "/dev/mem", O_RDWR | O_SYNC ) ) == -1 ) FATA...原创 2018-09-05 20:24:20 · 1306 阅读 · 2 评论 -
C++查看数据类型
#include <typeinfo>#include<iostream>using namespace std;int main(){int a[2][2][2]={{{1,2},{3,4}},{{5,6},{7,8}}};int (*p)[2][2];int b=10;int *p1=&b;short *(pp[2][3]);cout&...原创 2018-09-06 17:00:55 · 23769 阅读 · 0 评论 -
C++短路操作
所谓短路,就是用||,&&,这些双目操作符,实现一些if的判断。因为这些操作符具有的一个特点是:先计算左边的表达式值,能得到值就不计算右边了,不能再计算右边比如:expression1||expression2,当expression1计算得到1后,可以确定是true,就不再计算而直接下一局,&&类似,前面得到0就停下向下了 #include ...原创 2018-09-06 21:06:46 · 1722 阅读 · 1 评论 -
C/C++几个预定义的宏_错误处理
#define FATAL do { fprintf(stderr, "Error at line %d, file %s (%d) [%s]\n", \ __LINE__, __FILE__, errno, strerror(errno)); exit(1); } while(0)上述一段错误处理的代码,里面用到几个C/C++预定义的宏ANSI C标准中有几个标准预定义宏(也是常用...原创 2018-09-06 21:28:42 · 995 阅读 · 0 评论 -
C++异常处理
一种是直接调用abort(),中断程序,不够灵活 另一种用try,catch的形式即,try{...if() throw ...}catch(Type){...}catch(Type1){...}..catch(...){...}多个catch捕获try模块的throw后的内容具体来说,函数遇到throw,就会终端try模块的运行,根据thr...原创 2018-09-07 16:50:22 · 196 阅读 · 0 评论 -
new的异常处理
c++new运算符,如果分配内存失败了,不会像malloc一样返回NULL指针,所以判断返回NULL指针的方式判断内存分配是不合适的。另外,有些网上说new分配内存分配的实际是自有内存,并不一定像malloc严格是堆内存,也可能是栈内存(存疑,因为测试的都跟堆内存紧挨着)new分配的内存处理,抛出std::bad_alloc异常#include <iostream>#i...原创 2018-09-09 10:38:47 · 2413 阅读 · 0 评论 -
new malloc的区别
从使用上来说1.malloc需要自行计算分配的字节数,平常用sizeof(Type)*num来计算,new只需要声明需要的数目即可。2.malloc返回的是void*,需要自行再指针类型转换一下,new则不需要3.new声明对象的时候会调用对象的构造函数(一次申请多个的时候调用默认构造),析构函数,malloc则只分配内存。4.分配失败的时候,malloc返回空指针,new则是抛出...原创 2018-09-08 14:45:02 · 132 阅读 · 0 评论 -
C++内存管理
内存区的分类与例子 一个由C/C++编译程序占用内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量值等。其操作方式类似于数据结构中栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中堆是两回事,分配方式倒是类似于链表.3、全局区(静态区)(static)—,全局变量和静态变量...原创 2018-09-05 14:38:29 · 114 阅读 · 0 评论 -
socket本地通信
//socket本地编程,服务器端#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include <sys/un.h>#include<string.h>#include<arpa/ine...原创 2018-09-05 09:43:47 · 3117 阅读 · 0 评论 -
static关键字与多文件编译
关于多文件编译,应该是如下:Main.cpp 里面写主程序,include“Filetest.h”Filetest.h 里面完成函数,类,变量的声明,注意#ifndef .. #define .. #endifFiletest.cpp里面完成函数,类,变量的定义,注意使用cout的话加上命名空间需要注意的是:使用全局变量的话,在filetest.cpp里面完成声明 int a=1;...原创 2018-09-04 19:59:22 · 1544 阅读 · 0 评论 -
const关键字
Const关键字关键点1:全局const变量分配在全局区,只读,不能修改关键点2:程序内const变量分配在栈区,只读,但是可以通过指针修改关键点3:编译阶段会发生常量折叠,把出现const变量的地方替换掉 Const关键字的总结声明常变量: 对这里的代码,声明了常变量a,为其分配了内存,分配在栈内存区,a是只读的,所以第二行不能修改但是,可以用一个指针,指...原创 2018-09-03 21:43:38 · 227 阅读 · 0 评论 -
类模板的语法
定义一个类模板:Template < class或者也可以用typename T >class类名{//类定义......};说明:其中,template是声明各模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个。例如template <class Type>class stack_class{ private:...原创 2018-09-02 19:56:38 · 357 阅读 · 0 评论 -
C/C++中数据类型转换
https://blog.youkuaiyun.com/vast_sea/article/details/8122213https://www.linuxidc.com/Linux/2015-11/124918.htmLinux内核中只有atoi()函数,被包含在stdlib.h头文件中,而没有itoa()函数,不过,itoa()函数的功能可以用sprintf()函数代替。如int nVal...转载 2018-09-02 19:32:36 · 368 阅读 · 0 评论 -
errno变量的查看
在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信息和现在的errno所对应的错误一起输出。perror(s) 用来将上一个函数发生错误的原因输出到标准设备(stderr)。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno的值...原创 2018-09-04 22:03:00 · 1057 阅读 · 0 评论 -
Typedef,inline
主要就是别名,之前一字节用的#define unsigned char u8,四字节用#define unsigned int u32用define简单的替换,可能会出问题数据类型 Uint8_t uint32_t等定长的定义, List<int>这种复杂类型 函数指针的定义,很好地简化#include <iostream>#include <st...原创 2018-09-04 21:17:49 · 198 阅读 · 0 评论 -
socket编程网络与本地
socket网络编程//ARM嵌入linux与PC的通信程序 int fd = 0; int newfd = 0; int addr_len = sizeof(struct sockaddr_in); int recv_len = 0; int q=0; int z=0; int len; //struct array y1,y2; ch...原创 2018-09-05 09:35:08 · 464 阅读 · 0 评论 -
socket编程2——recv与send的一点理解测试
//PC间的通信测试recv与send函数,服务器端#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<string.h>#include<arpa/inet.h>#include&...原创 2018-09-05 09:40:24 · 469 阅读 · 0 评论