
编程心得
sdoyuxuan
高产似母猪 一月20篇~ ~
展开
-
AVL树 四种旋转的场景
以下图的平衡因子统一为左子树高度减去右子树高度。1 左单旋 (右右 - 在较高右子树的右侧插入节点) 附上:单个节点声明的代码struct AVLTreeNode{ AVLTreeNode(const K& key, const V& value) : _pLeft(NULL) , _pRight(NULL) , _pParent(NULL) , _key(key)原创 2017-05-24 12:12:44 · 598 阅读 · 0 评论 -
常量和变量(努力的第二天)
今天学到了常量,常量分为整数常量、字符常量、字符串常量、枚举常量。 整数常量属于整型,在数字后面加“f、l、ul(无符号长整型),对于浮点数没有后缀的为double型”。在数字前加“0(八进制)、0x(十六进制)”等前缀为几进制数。字符常量为一个整数,‘X’ 代表相应ASCII的值。有些特殊字符为转义字符。字符串常量是用“”内多个或0个字符组成的字符序列。而双引号只是用来限定字原创 2016-09-26 22:57:10 · 331 阅读 · 0 评论 -
神奇的memmove
实现memmove函数时的原理:#include #include void * my_memmove(void * dst,const void *src, int count){assert(dst); assert(src); register char * d_st = (char*)ds原创 2016-11-23 22:57:34 · 466 阅读 · 0 评论 -
Linux下彩色进度条的实现(printf的格式化输出成彩色的,在linux下才有效)
我们在生活中都看到过进度条,那么进度条该如何实现呢?这是我们自己写的进度条小程序分享给大家 1 #include 2 #include 3 int main() 4 { 5 char bar[102]; 6 int i=0; 7 const char *p="|/-\\"; 8 do{ 9 bar[i]='#'; 10 bar[i原创 2017-04-04 15:26:19 · 806 阅读 · 0 评论 -
多态草稿
多态 在C++中继承和多态为它的俩大特性。 那么对于我们常说的动态多态,它是如何形成的?通常我们都会说应用赋值兼容规则,让一个Base类指针或引用指向一个派生类对象,那么当我们在基类中定义出一个虚函数,在派生类中我们对它进行重写后。当我们用指向派生类对象的基类指针调用这个函数时,就会发生多态,当指针指向对象不同时,它就会调用不同类中的该函数。原创 2017-05-30 21:26:28 · 349 阅读 · 0 评论 -
test
#include#include#include#include#include#includeint startup(const char*ip,const char* port){ int sock=-1; if((sock=socket(AF_INET,SOCK_STREAM,0)) { perror("socket");原创 2017-07-04 20:19:06 · 224 阅读 · 0 评论 -
shell脚本实现shell排序
内容空原创 2017-07-31 20:02:49 · 595 阅读 · 0 评论 -
布隆过滤器
代码template<class T>struct __HashFunc1{ size_t BKDRHash(const char *str) { register size_t hash = 0; while (size_t ch = (size_t)*str++) { hash = hash * 131原创 2017-08-20 16:11:02 · 82 阅读 · 0 评论 -
位图
template<size_t _Bsize>class BitSet{public: /*BitSet(size_t bitNum) { _s.resize((bitNum >> 5 )+ 1); }*/ BitSet(std::string bit) { for (size_t idx = 0; idx < bit.s原创 2017-08-20 15:41:43 · 333 阅读 · 0 评论 -
Linux 下创建一个文件,打开一个目录需要什么权限呢?
linux 下的文件创建和进入目录:1 进入目录的权限要求: 首先从上图大家可以看见我的test目录的文件属性为: d r w x r w x r - x 这10个字母,我们把第一个单独为一组,剩下九个每三个一组从前到后。第一组代表user,第二组代表group,第三组代表other。其中rwx分别代表的是 执行,可读,可写权限。原创 2017-03-19 16:50:01 · 4082 阅读 · 0 评论 -
标准输入输出与错误的缓冲
stdin行缓冲stdout行缓冲stderror无缓冲从文件中读写是 全缓冲scanf 与 cin 遇见空格会停止从标准输入流中读取数据,空格之后的数据还在缓冲区。进程fork时缓冲区也会连带着一起被复制,原先没刷新的缓冲区的数据也会被复制。原创 2017-08-26 12:55:54 · 489 阅读 · 0 评论 -
vector 心得
earseearse时整个数组向前移所以在vector上的迭代器都失效,故需每个迭代器–it下才能正常使用。 resize(nums),实际vector的有效元素变为nums个并初始化为0。这时再push_back就在nums后面插入了。 push_back ,insert 可能造成迭代器失效原创 2017-08-26 23:22:58 · 324 阅读 · 0 评论 -
c语言结构体对齐规则
1.第一个成员在与结构体变量偏移量为0的地址处。 2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 //对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的值为8 linux中的默认值为4 3.结构体总大小为最大对齐数(每个成员变量除了第一个成员都有一个对齐数)的整数倍。 4.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的对齐数原创 2017-09-07 09:11:44 · 565 阅读 · 0 评论 -
c++下实用的工具stringstream
stringstream它继承自 ostream 与istream,所以可以输入输出,而且它还有很多其他用处,列如类型转换。它可以把int,long,double这些数字输入至string,也可以把一个int的值输入给long。它十分类似于sprintf函数,把格式化输出至一个char的缓冲区中。只不过stringstream可以把缓冲区的内容自动转换成数字输入给整形。清空stringstream先原创 2017-08-30 17:06:04 · 335 阅读 · 2 评论 -
c++抽象类
抽象类定义当类中有成员函数是纯虚函数的话该类就是抽象类,抽象类的纯虚函数不能给出定义只能给出声明即可。抽象类可以有成员变量,但是自己不能实例化抽象类的对象,但是它可以被继承,通过派生类对象来访问它的成员变量。另外只要为了多态声明的基类,析构函数都应该声明为虚函数,防止内存泄漏。 应注意的几个点: 1. 抽象类的所有纯虚函数在派生类中必须重写,否则派生类对象无法定义出来。 2. 纯虚类可以有构造原创 2017-09-26 09:22:46 · 862 阅读 · 0 评论 -
类内给出函数主体和类外给出成员函数主体区别
这个唯一的区别就在于类内成员函数主体编译器会尽可能优化为内联函数,而类外成员函数主体不会优化为内联函数。原创 2017-09-26 09:55:23 · 627 阅读 · 0 评论 -
虚拟机可正常启动但虚拟机窗口无法正常显示
1先打开任务管理器关闭所有与vm相关的进程2打开windows 下的计算机管理窗口重启vm相关的服务即可原创 2017-08-31 17:29:03 · 9280 阅读 · 2 评论 -
左值、右值、变量类型
一个变量在表达式中是代表左值还是右值,可以直接对该变量取地址,如果可以取地址,则该变量当前代表左值否则代表右值。 这点是很重要的,一个变量当前代表左值还是右值是于当前变量的类型无关的。class Widget {public: Widget(Widget&&object) };如上面这个列子,虽然object是一个右值引用,但是我们可以取object对象的地址,所以object代表的是一原创 2017-10-09 19:25:55 · 415 阅读 · 0 评论 -
C++ 对象
类型大家平常写的,内置类型,class , struct 类型, 类型到底是什么呢? 其实类型就是一个标签,这个标签规定了相应的变量占据了多大的空间。虚表虚表分俩个,一个虚函数表一个虚基类表。这俩个表在编译期间,由编译期构造出来,并在构造对象时,将该表的地址赋值给 相应对象的 vptr。 每一个类都有一张专属的虚表,所以一个类的所有对象公用一张虚表,该虚表其实就是一个const 的对象,要么它原创 2017-11-06 14:12:44 · 231 阅读 · 0 评论 -
C++中的继承
何为继承? 何为继承?在现实生活中继承这个词很常见。继承意志,继承父母留给我们的财产。继承在我们生活中很常见。在C++中继承是其一大特性。 面向对象程序设计(OOP)的核心思想是数据抽象、继承和动态绑定。 继承(inheritance)是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持 原有类特性的基础上进行扩展,增加功能。这样产生新的类,原创 2017-02-25 20:49:26 · 632 阅读 · 0 评论 -
函数重载
Const运算符重载函数每个类都需要重载自己的运算符,这样该类的对象才能使用相应的运算符。对于运算符重载函数来说,参数个数就是该运算符接受的运算对象的个数,这个大家都是知道的。 对于const修饰运算符重载函数这是至关重要的, object operator + (const object &amp;amp;amp;) const ; 修饰函数的这个const其实修饰的是this指针。this指针从,obj...原创 2017-10-13 16:13:21 · 1622 阅读 · 0 评论 -
范围for 循环的坑
char buff[1024] = "Hello world";for(auto & i : buff ){ upper(i);}列入上面这个列子,当我们不得不使用 C语言风格的字符串时,潜意识会认为,范围for 应该遍历到 \0 就停止,但是很可惜的是不是的。它遍历到buff[1023]就当前列子说,所以当范围for 对象是一个C风格的字符串时,我们不能依赖 \0作为结束。原创 2017-10-14 17:14:54 · 283 阅读 · 0 评论 -
gdb 7.10.1(最新版) 编译安装
虽然现在gdb 8.0最新版,但是编译安装的原来大致一样1 wget http://ftp.gnu.org/gnu/gdb/gdb-7.10.tar.gz ./2 tar -zxvf gdb-7.10.tar.gz3 cd gdb-7.10.tar.gz4 ./configure5 make6 make install7 然后把安装路径下的gdb程序替换到Bash指定的默认路径下即可原创 2017-10-23 23:58:58 · 1930 阅读 · 0 评论 -
Linux的创建文件/目录中的权限参数mode
mkdir/creat/openmode参数是指创建文件时需要创建出什么权限的文件,我原本以为这个跟chmod 这种指令的mode指的同一个东西。777 ,666什么的直接设置 user/group/other的权限,但是我试了结果创建出来的权限很奇怪。 再查找了相关资料后发现。如果不用宏的话。用数字快捷创建时。 分5个模块跟chmod设置权限的方式很相似。 第一个模块是否设置用户ID (0代原创 2017-10-17 13:36:10 · 1755 阅读 · 1 评论 -
std:: /前置声明/ #pragma once
总结 如果我们对全局作用域内的东西不加 std:: 的话,在很复杂的类内可能用类外的报错 在写模板的时候,即使包括了其他头文件,如果不写前置声明的话,也是会报错的,可能报错看不懂很玄幻。 #pragma once / #ifndef _头文件名 #endif ,都是可以只让该头文件包含一次,这个很重要,可能在复杂的工程里,俩个头文件互相包含,结果导致重复展开,导致类的重定义,从而导致报原创 2017-11-11 23:28:22 · 379 阅读 · 0 评论 -
什么样的类vector和map不能构造其对象呢?
分析对于vector来说,它的构造函数就下面的这个代码construct (size_t N , T & t=T()){ // 然后通过 置位new 表达式,在已经申请的内存上,构造拷贝构造函数}故一个对象不能被vector构造,那么肯定它的拷贝构造函数不能调用。 对于map来说,它底层转调了 红黑树,如果这个对象不能被构造出来,那肯定 operator < 重置函数不能被调用导致的原创 2017-11-18 21:33:48 · 232 阅读 · 0 评论 -
c++类型推导
类型推导现代c++类型推演分为三个,一个为模板函数的形参推演。一个为auto的形参推演。一个decltype的类型推导。auto的类型推导是以模板函数的类型推导为基础的。模板函数类型推导推导过程模板函数的类型推导,是通过调用表达式即实参的类型与模板函数相应的形参类型一 一匹配以此来推导出模板参数类型。template<typename T>void f(ParamType param);f(e原创 2017-10-09 21:19:29 · 1987 阅读 · 0 评论 -
动态规划问题
如果结果不正确,那么肯定初始状态有问题!!!原创 2017-12-10 23:32:48 · 205 阅读 · 0 评论 -
链表究极分析总结大作战
1 打印俩个有序链表公共部分思路 这道题很简单,核心思路就是,如果当L1的值小于L2当前的值,L1一直往后走,直到找到大于等于L2的值,等于输出,大于的话,L2就开始遍历做跟L1一样的事情。代码#include<iostream>using namespace std;struct Node{ int _data; Node * next;}void Print(Node原创 2017-11-24 11:11:34 · 282 阅读 · 0 评论 -
C++对象模型之继承与多态的探索
多态在C++中继承和多态为它的俩大特性:那么对于我们常说的动态多态,它是如何形成的? 通常我们都会说应用赋值兼容规则,让一个Base类指针或引用指向一个派生类对象,那么当我们在基类中定义出一个虚函数,在派生类中我们对它进行重写后。当我们用指向派生类对象的基类指针调用这个函数时,就会发生多态,当指针指向对象不同时,它就会调用不同类中的该函数。那么何为赋值兼容规则呢,为什么Base类指针就可以指向原创 2017-06-29 19:37:34 · 551 阅读 · 0 评论 -
谨防.vim.xxx.swap 文件
这个.vim.xxx.swap文件是由于vim崩溃产生的,可通过 vim -r .vim.xxx.swap 打开。有个坑就是这个东西不删除就一直在,那天你打开vim看见有个 R 选项 recovey ,打开这个玩意,那么你就坑爹了,可能这个.swap文件比你当前文件时间早很多,是之前内容你这个时候一个 wq 就坑啦。原创 2017-12-24 11:41:04 · 595 阅读 · 0 评论 -
iTerm2安装
先下载对应mac版本的iTerm2查看mac 版本 点击后查看对应的系统版本,然后单击http://www.iterm2.com/downloads.html这个网页,打开网页后下载相应版本的软件包。 安装即可打开后在Mac的左上角即苹果那个图标处,右边有iTerm2,在哪里我们可以点右键进行设置,然后点击preferences,然后点击profiles,然后设置即可,在working Diret原创 2017-12-07 22:15:25 · 510 阅读 · 0 评论 -
interllij idea --- vim 编辑器安装
打开interllij idea的时候点击Install JetBrains打开后点击plugins接着点击左下角的install jet brains plugin…打开搜索vim然后安装,它会提醒你重启ide, 然后重启即可。原创 2017-12-07 22:20:07 · 554 阅读 · 0 评论 -
类的设计
成员变量在c++中在同一访问限定符下的成员变量的声明顺序与初始化顺序一致,所以设计的时候尽量把成员变量都放到同一个限定符下。成员函数成员函数的限定符可以自定义,最好不同模块不同的限定符修饰,不要全放在同一个限定符下,这样方便维护。eg:class eg{ public : /*模块A的函数*/ ... public: /*模块B的函数*/ ..原创 2017-12-18 11:28:01 · 361 阅读 · 0 评论 -
Linux 下 Snappy库安装
下载 0. 本文使用 Git 安装必须机器上配置好了Git。Git配置详见 http://blog.youkuaiyun.com/sdoyuxuan/article/details/78751494 1. https://github.com/google/snappy 点击Download 复制粘贴SSH 2. git clone https://github.com/goo原创 2018-01-22 12:03:54 · 8234 阅读 · 0 评论 -
Linux 快速查找某个文件具有相应的内容
小坑 以前一直以为gcc 的 -g 选项在链接的时候加上即可,原来在编译的阶段就要加上。即当需要生成 .o文件的时候,需要加上-g才能调试。gcc -c file -o xxx.o -g ...原创 2018-01-14 18:18:43 · 327 阅读 · 0 评论 -
类的二三事
类 类的基本思想就是数据抽象和封装。数据抽象依赖于接口和实现。接口指类外成员对象可使用的函数接口。实现指类的成员函数和成员变量。封装实现了接口和实现的分离。类本身就是一个作用域。类外访问,可以通过作用域的限定符和成员访问符来进行访问。能否访问类的成员依赖于,该成员被什么访问限定符修饰。访问限定符:(1) public:它指公用,被它修饰的类成员在类外可以访问。(2)protec...原创 2017-04-07 22:14:57 · 476 阅读 · 0 评论 -
为什么 static 修饰全局变量或者函数后 只在当前源文件内有效
全局变量 我们都知道全局变量具有全局链接属性。A.cppint a = 0;B.cppextern int a ;int main(){ a =1 ;} 这是因为当链接的时候,链接器处理 B.cpp 经过处理的 B.o 的时候,发现一个未解析的全局符号。这个时候继续往后处理,当链接器扫描其他源文件的符号表的时候发现了 该全局符号,如果这个全局符号是已初始化的,那么原创 2018-01-22 19:26:36 · 3294 阅读 · 2 评论 -
匿名命名空间 与 static 区别与联系
区别1 static 无法修饰 ADT类型(自定义类型) 2 static 产生当前 符号只在当前源文件有效,是因为它修改了符号的Bind属性,使之变为局部的。而 匿名空间虽然可以产生相同效果,但是符号还是具有外部链接属性。匿名命名空间 1.匿名命名空间内的变量与函数,只在当前源文件内有效。同一源文件内的匿名空间中的符合最终会合并。 2.不同源文件的匿名命名空间,可以存在同名符原创 2018-01-22 20:24:08 · 4223 阅读 · 0 评论 -
gcc 不同版本对程序的影响
不同版本的编译器对程序的影响 1. 因为在Linux 下我们写的c++程序,默认是会链接 libstdc++.so 这个动态库文件,如果牵扯到版本的更新,直接用新的动态库文件更新老的话,老的程序都无法运行。因为找不到老的动态库文件。 2. 当使用高版本的 gcc 链接程序的时候,老的源文件需要编译,因为老的 .o 文件中 可能对 STL中模板类或者函数名的修饰跟新版本的编译器是不一样的。原创 2018-01-23 10:15:02 · 10140 阅读 · 0 评论