C/C++学习笔记
小小初行者
这个作者很懒,什么都没留下…
展开
-
单项链表的逆置
源代码#include <stdio.h>#include <stdlib.h>struct list{ int data; struct list *next;};struct list *create_list()//建立一个节点{ //struct list *p = malloc(sizeof(struct list)); //p->data = 0;原创 2015-08-10 10:26:56 · 585 阅读 · 0 评论 -
[Boolan] C++第四周 C++面向对象(下)
1. conversion function, 转换函数转换函数,用作类型转换,编译器可以自动调用,当然也可以显示调用,C风格的(type)value, C++风格的static_cast<type>value 都是可以的需要注意的是如果类已经有转换函数,就不需要在写这个类与要转换的类的运算符重载了,因为会出现二义性,例如代码注释的部分#include <iostream>#include <原创 2017-02-12 01:47:17 · 419 阅读 · 0 评论 -
[Boolan] C++第四周 homework 虚函数表与内存对齐
参考链接:C++ 虚基类表指针字节对齐模型题目:分别给出下面的类型Fruit和Apple的类型大小(即对象size),并通过画出二者对象模型图以及你的测试来解释该size的构成原因。声明:编译器是VC6.0对象模型图黑色部分是我没有找到什么官方文档来解释,但是找到一边博客,并且被CSDN的C++知识库收录,应该尤其权威性。隐藏成员的加入不能影响在其后的成员的对齐#include <iostrea原创 2017-02-13 23:03:41 · 642 阅读 · 0 评论 -
[Boolan] C++第六周
因为本节课老师也是再讲STL的基本用法,再加之平日工作也是经常使用STL,基本用法很熟悉了,所以水一周STL六大部件容器(Containers) 容器都是铅笔后来分配器(Allocators)算法(Algorithms)迭代器(Iterators)适配器(Adapters)仿函数式(Functors)最简单的例子#include <vector>#include <algorithm>原创 2017-03-02 21:32:02 · 299 阅读 · 0 评论 -
[Boolan] C++第九周 STL 泛型编程(三)
1. 迭代器STL的算法的操作对象都是迭代器,所以就需要迭代器提供算法需要的各种信息,例如每个迭代器都需要定义的5个typedeftemplate<typename _Tp>struct _List_iterator{ typedef std::bidirectional_iterator_tag iterator_category; //容器的类别 type原创 2017-03-19 00:02:32 · 495 阅读 · 0 评论 -
[Boolan] C++第八周 STL 泛型编程(二)
一. deque双端队列,支持快速随机访问,在头尾位置插入和删除很快 像上图,一般介绍deque是右上角这样的,两端都可以push和pop,并且可以像数组一样支持随机访问,一段连续的内存 其实他的实现并不是使用一整段连续内存来实现的,毕竟这样做,效率不高,而且扩展性不强 实际GUN的是使用多个大小相同的内存块,而不是一个连续的内存来实现的,并且使用一个类似索引的map来管理他原创 2017-03-12 18:14:34 · 334 阅读 · 0 评论 -
[Boolan] C++第七周 STL 泛型编程(一)
参考链接:C++new和delete实现原理1. OOP(面向对象编程) vs GP(泛型编程)OOP:将datas跟methods关联放到一起GP:将datas和methods分开,通过迭代器关联在一起 sort(c.begin(), c.end()) 优点:可以将容器和算法分别开发,低耦合,算法通过迭代器确定操作范围,并且通过迭代器获取数据2. 分配器VC++中//newop2.cp原创 2017-03-05 17:46:15 · 424 阅读 · 0 评论 -
[Boolan] C++第十周 STL 泛型编程(四)
1. 一个万用的Hash Function参考链接:Parameter pack:http://en.cppreference.com/w/cpp/language/parameter_pack省略号和可变参数模板: https://msdn.microsoft.com/zh-cn/library/dn439779.aspx解析:下面代码中,hash_val就是自定义的hash_function,是原创 2017-03-25 13:07:08 · 394 阅读 · 0 评论 -
[Boolan] C++第十一周 C++设计模式(一 )
一. 面向对象设计原则1. 依赖倒置原则 ( DIP )- 高层模块 (稳定) 不应该依赖于底层模块 (变化) , 二者都应该依赖于抽象- 抽象 (稳定) 不应该依赖于实现细节 (变化),实现细节都应该依赖于抽象2. 开放封闭原则 ( OCP )- 对扩展开放,对更改封闭- 类模块应该是可扩展的,但是不可修改3. 单一职责原则 (SRP)- 一个类应该仅有一个引起它变化的原因- 变化的方向原创 2017-04-02 16:32:11 · 463 阅读 · 0 评论 -
[Boolan] C++第五周 重载const,new,delete
动态绑定const 重载const修饰类成员函数,该成员函数里面不可能修改成员变量其中const也算函数签名的一部分, 只用于在类的成员函数const的重载使用条件:如果一个类声明中有const重载的函数,const对象使用const修饰的成员函数,非const对象使用没有const修饰的成员函数#include <iostream>using namespace std;class Foo原创 2017-02-21 07:33:18 · 316 阅读 · 0 评论 -
[Boolan] C++第二周(创建一个带指针成员变量的类)[注意事项]
1. Big Threeclass String{public: String (const char* cstr=0); String (const String &str); String &operator=(const String &str); char* get_c_str() const {return m_data;}private: c原创 2017-01-21 21:09:13 · 489 阅读 · 0 评论 -
[Boolan] C++第三周 类的关系。 复合,委托,继承
1. Composition复合has a的关系,表示一个类是另一个类的成员变量,一个类包含另一个类class A;class B {public: B(){} ~B(){}private: A a; int b;};构造与析构构造-由内而外:B的构造函数会首先调用A的默认构造函数(编译器自己调用,如果需要传递参数,需要在初始化列表显示调用),然后在调用自原创 2017-02-08 21:40:14 · 1122 阅读 · 0 评论 -
[Boolan] C++第一周(创建一个不带指针成员变量的类)[注意事项]
提醒自己: 选择C++很大程度上是因为C++的高效率和面向对象,所以要注意每一个影响效率的小细节1. 数据都在private,并且都在initialization list初始化2. 参数尽量都是reference3. 返回值优先考虑reference 4. 类的成员函数,如果可以加const的,要加const(常量成员函数)第7点转载链接:http://blog.csdn.ne原创 2017-01-07 23:55:47 · 534 阅读 · 0 评论 -
原码,补码,反码
原码,补码,反码bit BYTE WORD DWORD 1 BYTE = 8 bit 1 WORD = 2 BYTE 1 DWORD = 2 WORD原码 定义:将最高位做为符号位(0代表正,1代表负),其余各位代表数值本身的绝对值. 反码 定义:一个数如果值为正,那么反码和原码相同;一个数如果为负,那么符号位为1,其他各位与原码相反补码 定义:正数:原码,反码补码都相同;负数:最高原创 2015-07-18 21:31:52 · 640 阅读 · 0 评论 -
C语言中的转义符'\d', '\n'相关
Demo 1printf("abc");printf("\b\n");--------------$abc疑问:输出”abc”,在打印”\b”退格符,光标应该在b后面,这个时候在打印’\n’之后,应该是把c覆盖之后换行;或者是在b后面换行,c在第二行输出 Demo 2printf("abc");printf("\bd\n");---------------$abd这次输出得到,确实是退原创 2015-07-18 21:30:48 · 8609 阅读 · 1 评论 -
质数
质数(0~100)质数:除了1和他本身,不能被任何数整除的数思路:首先要先遍历一遍0~100,然后再判断每个数是不是质数, 所以就有第一个for循环 for(i=2; i<100; i++) { }现在我们只是有被除数,还要有除数,所以在进行一次for循环,这个循环也是1~i,因为除以一个比自己大的数没有意义,所以到i就好了. for(i=2; i<100; i++)原创 2015-07-19 21:29:29 · 486 阅读 · 0 评论 -
01文件循环位移加密 C预处理宏2015/08/24
文件循环位移加密核心代码 加密函数void encrypt(char *str, int len){ int i = 0; for (i = 0; i < len; i++) { unsigned char data = *str; //一定转成unsigned不然负数进行右移的时候会不可预知 if (*str == 0) {原创 2015-08-26 21:20:13 · 707 阅读 · 0 评论 -
02类型转化 进程空间 数组2015/08/26
类型转化小变量赋给大类型char a = -1; int b = a; b是-1 a的符号位是1,并且a是小变量,赋给int,是4个字节的,大类型,按照低字节对齐,前面进行符号位扩充a的二进制 1111 1111b的二进制 1111 1111 1111 1111 1111 1111 1111 1111 前面的1是符号原创 2015-08-26 21:22:28 · 365 阅读 · 0 评论 -
C/C++笔记(二) 2015/8/15
栈VS2013中 栈的内存区域只有默认的1M //修改:项目设置->属性->链接器->系统先进后出静态区与程序共存,内存不会被会后利用,除非程序消亡堆区,块语句执行完成亡static限制只能被当前的源文件所引用插值查找法int serch2(double *p, int n, int key){ int tou, wei, zhong; tou = 0; we原创 2015-08-26 21:10:44 · 347 阅读 · 0 评论 -
# 2.1 linux文件系统dup/dup2重定向应用实例
从文件里面读出1000个随机数,进行排序,再写到另一文件中。(考虑使用重定向dup/dup2)#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/stat.h>#include <sys/types.h>#include <fcntl.h>void swp(int *p1, int *p2) //交换原创 2015-07-20 15:41:54 · 812 阅读 · 0 评论 -
逗号运算符简析
今天在网上看到了逗号运算符,发现完全没印象,随手百科一下:做了个题,把内容贴一下,表达式1,表达式2,表达式3,...... ,表达式n逗号表达式的要领:(1) 逗号表达式的运算过程为:从左往右逐个计算表达式。(2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值。(3) 逗号运算符的优先级别在所有运算符中最低我个人觉得第三点容易被忽略,逗号的运算度比赋值符还低。原创 2015-08-06 00:01:20 · 520 阅读 · 0 评论 -
C/C++笔记(一) 2015/8/15
1.C语言中左值和右值的区别左值可以放在赋值符左边的值,右值是放在赋值符右边的值。左值,没有内存实体的左值是存在的右值,可以有内存实体,也可以没有内存实体(寄存器),a+1,&a,右值都在寄存器。2.调试、下断点断点:可以中断程序执行,观察内部过程GPU,显卡的处理器3.const和define的区别const会进行类型转换,而define不会,只是的替换#define K 100.0c原创 2015-08-15 11:17:35 · 505 阅读 · 0 评论 -
[Boolan] C++第十三周 C++设计模式(三)
设计模式状态变化 模式1. Memento - 备忘录Memento 模式的关键就是要在不破坏封装行的前提下,捕获并保存一个类的内部 状态,这样就可以利用该保存的状态实施恢复操作 #include <iostream>#include <string>using namespace std;class Originator;class Memento{ private: f原创 2017-04-15 16:45:08 · 616 阅读 · 0 评论