- 博客(44)
- 收藏
- 关注
原创 文件压缩
#pragma once#include <iostream>#include <vector>using namespace std;template<class T>class Greate//大堆{public: bool operator()(const T& left, const T& right)//仿函数,重载()大于 { re...
2018-04-14 16:16:47 274
原创 数据结构(vector+list)
vector和list的使用vector为存储的对象分配一块连续的地址空间,因此对vector中的元素随机访问效率很高。在vecotor中插入或者删除某个元素,需要将现有元素进行复制,移动。如果vector中存储的对象很大,或者构造函数复杂,则在对现有元素进行拷贝时开销较大,因为拷贝对象要调用拷贝构造函数。对于简单的小对象,vector的效率优于list。vector在每次扩张容量的时候,将容量扩...
2018-02-28 15:18:54 854
原创 模板的类型萃取
初次接触类型萃取是在运用模板实现seqlist的时候,拷贝构造和赋值运算符重载时,单纯的使用memcopy(),函数进行拷贝,只是单纯的进行了浅拷贝,对于基本的数据类型是不会有任何错误的,但是如果是string类型时,单纯的值拷贝显然是不行的(超过了给定的buffer空间时),指向了同一块开辟的空间,然后析构时会出现问题。所以一开始直接调用赋值运算符的重载,这样显然不会出现问题,但是对基本的数据类...
2018-02-28 15:08:23 252
原创 字符函数串讲
1.模拟实现strncpy#include<stdio.h> #include<assert.h> #include<iostream> char*my_strncpy(char*dest, const char*src, int n){ assert(dest != NULL); assert(src != NULL); int i = 0; char ...
2018-02-28 14:59:37 222
原创 指针下
1.总结指针部分的知识。一级指针、一维数组、数组指针一维数组的数组名就是指针,如int a[4]={0}; a就相当于一个指针 int *p=a。二级指针、二维数组、指针数组二维数组 int aa[2][3]={0}。这个时候是不能用int **pp=aa,但访问的时候应为**aa。实际上二维数组的第一维是int (*ab)[3],是个指针数组,不是数组指针。2.利用函数指针实现一个通用的冒泡排序...
2018-02-28 14:47:53 202
原创 指针2
//1.一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。 //找出这两个数字,编程实现。#include#include//找单独出现的数,一般方法void find(int arr[], int len){ int i, j, k; for (i = 0; i { k = 0; for (j = 0; j { if (ar
2018-01-21 18:47:17 170
原创 main函数的可变参数列表
#include #include #include int main(int argc, char *argv[]){ int sum = 0; int num1 = atoi(argv[2]); int num2 = atoi(argv[3]); if (strcmp(argv[1], "-a") == 0) { sum = num1 +
2018-01-21 17:35:34 267
原创 智能指针
1.智能指针是RAII思想的一种产品,RAII:Resource Acquistion Is Initialization ,资源分配就初始化,定义一个类来封装资源的分配和释放。在构造函数里完成资源分配初始化,在析构函数里完成资源的清理。通常是经由类模板来实现。借由模板来达成泛型,通常借由类的析构函数来达成自动释放指针所指向的内存或对象。第一个阶段(C++98):auto_
2017-12-09 21:14:42 186
原创 Linux的基本开发工具
1.vim 和 emacs 都可以运行在终端,也有图形化的软件,非常适合快速编辑文件。当需要在无法运行图形界面的服务器上编辑代码的时候,二者也足以胜任。虽然在终端也有 nano 这样的编辑器,但毕竟 too simple ⚯,无法支撑较为复杂的编辑工作。这两个编辑器的默认配置的功能就已经很强大了,语法着色、补全、缩进等功能都很不错。为了实现强大的功能,vim 选择了多模式编辑(Normal,
2017-12-09 19:31:23 480
原创 多态与对象模型
1,什么是多态?同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。 简单地概括为“一个接口,多种方法”。2.单继承和多继承的对象模型
2017-11-25 15:49:45 191
原创 Linux作业
进入目录需要哪些权限, 在目录中执行增删查(cd, touch, ls, rm, mv等)改文件动作, 需要哪些权限.rw 文件拥有者r-- 本组用户r-- 其他人r w - 读 写 执行- 没权限Linux下的重要目录/pr
2017-11-25 14:40:50 741
原创 模板为什么不支持分离编译
如下图所示,在模板函数运行要经历预处理,编译,汇编,链接几个过程,前三个都没有问题,但是在链接时,因为是模板函数,没有实例化出代码,尽管生命了,却没有定义,所以不支持分离编译。解决办法一是显示实例化模板,二是将声明和定义放在同一个头文件中。
2017-11-18 19:59:37 311
原创 C++实现双向链表
#pragma oncetypedef int DataType;struct ListNode{ ListNode* _next; ListNode* _prev; DataType _data; ListNode(const DataType& x) :_data(x) ,_next(NULL) ,_prev(NULL) {}};cla
2017-11-15 22:05:36 155
原创 C++实现顺序表和单链表
#pragma oncetypedef int DataType;class SeqList{public: SeqList() :_a(NULL) ,_size(0) ,_capacity(0) {} // 拷贝构造 SeqList(const SeqList& s) :_a(new DataType[s._size]) ,_size
2017-11-15 21:30:28 228
原创 菱形继承
1:分析菱形继承的问题 菱形继承是指一个基类A派生出两个派生类B,C,再有两个派生类B,C共同生成一个派生类D。由于D是继承B和C,而B和C又是继承自A,所以D中的_a不确定是来自B还是C,产生了二义性,因为B和C中的_a都是来自A,其实两个_a是一个,但是因为B和C各自继承,所以有两份,产生了数据冗余。2:剖析虚继承是怎么解决二义性和数据冗余
2017-11-05 14:56:21 288
原创 string的增删查改
#pragma once#include#includeusing namespace std;class String{public: String(const char* str = "") :_size(strlen(str)) { _capacity = _size; _str = new char[_capacity + 1]; s
2017-10-31 22:35:51 316
原创 写时拷贝
写时拷贝:引入一个计数器,每片不同内容的空间上都由一个计数器组成,在构造第一个类指向时,计数器初始化为1,之后每次有新的类也指向同一片空间时,计数器++;在析构时判断该片空间对应计数器是否为1,为1则执行清理工作,大于1则计数器-1。如果有需要进行增删等操作时,再拷贝空间完成,有利于提高效率。#includeusing namespace std;class Strin
2017-10-30 10:30:46 238
原创 复杂链表的复制及测试
#includeusing namespace std;typedef struct ComplexNode{ int _data; struct ComplexNode* _next; struct ComplexNode* _random;}ComplexNode;ComplexNode* BuyNode(int data){ ComplexNode*
2017-10-30 10:13:18 232
原创 完成日期类的实现
#include#include#includeusing namespace std;class Date{public: Date(int year = 1990,int month = 1,int day = 1) { _year = year; _month = month; _day = day; } Date(const Da
2017-10-25 11:26:52 257
原创 递归
#include#include#include//编写一个函数实现n^k,使用递归实现int Kfactorial(int n){ if (n return 1; else return n*Kfactorial(n - 1);}int main(){ printf("%d\n", Kfactorial(7)); return 0;
2017-10-24 21:26:53 199
原创 string深拷贝的传统与现代写法
#includeusing namespace std;//1.传统写法完成String深拷贝。class String{ friend ostream& operatorpublic: //构造函数 String(char*str = "") :_str(new char[strlen(str) + 1]) { strcpy(_str, str);
2017-10-23 09:44:57 530
原创 C++动态内存管理
1.malloc/free与new/delete的联系和区别:(1).他们都是动态管理内存的入口。(2).malloc/free是C/C++标准库的函数,new/delete是C++操作符。(3).malloc/free只是动态分配内存空间/释放空间,new/delete除了分配空间还会调用构造函数和析构函数进行初始化和清理。(4).malloc/free需要手动计算类型大小且返回
2017-10-22 09:02:56 180
原创 拷贝构造中的N中调用情况
1.C++对传参时要生成一个临时变量,调用一次构造函数,再调用一次拷贝构造函数将临时变量复制给实参,也就是传参过程至少调用一次构造函数和一次拷贝构造函数。对于传引用时,编译器会自动优化,不需生成临时变量,因为形参出了作用域还存在,所以不需要调用拷贝构造函数,如果还有赋值运算,编译器将拷贝构造和赋值运算合并为一步。2.Test1中调用了__1_次AA的拷贝构造函数,_1__次AA的赋值运算符函数
2017-10-19 13:32:12 209
原创 考试编程题
#include#include#include#include#includevoid bit_set(unsigned char* p_data, unsigned char pos, int flag){ assert(p_data != NULL); assert((pos >= 1) && (pos if (flag == 1) { *p_
2017-10-17 14:02:28 423
原创 四个默认成员函数和重载运算符
1.类和对象的基础知识:类实际上是对某种类型的对象变量和方法的原型,类是从一些具有相同属性或功能的具体实例,抽象出共有的一些属性的,自定义抽象数据类型。public成员可从类外部直接访问,private/protected不能从类外部直接访问,每个限定符在类体中可以使用多次,类体中如果没有定义限定符,则默认为私有的,类的访问限定符体现了面向对象的封装性。结构体内存对其规则:(1).第一
2017-10-12 15:08:53 322
原创 C++入门基础知识
1.命名空间:也叫名字空间,名字空间域是随着标准C++引入的,相当于一个更加灵活地文件域(全局域),可以用花括号把文件的一部分括起来,并有关键字namespace开头给它起一个名字。名字空间域解决全局命名冲突的问题。2.C++基本的输入输出流:cin:标准输入流对象,键盘为其对应的标准设备。cout:标准输出流对象,显示器为标准设备。cerr和clog:标准错误输出流,输出设备是显
2017-10-12 13:56:39 158
原创 c语言实现单链表面试题之进阶篇
1.判断一个单链表是否带环:定义一个指针fast,另一个指针slow,两个指针同时从链表头开始往后走,若相遇,则表示单链表带环,否则,不带环。若带环,两个指针必会相遇,相遇之后再让slow指针走,再次回到相遇节点时走过的长度便是环的长度。假设链表头到入口点的长度为a,环的长度为b,入口点和相遇点的长度为c,因为slow一次走一步,fast指针一次走两步,如果a远大于b,则fast指针需要走n圈才能
2017-10-09 19:32:51 302
原创 单链表面试题——基础篇
顺序表和链表的优缺点1:顺序表可以进行随机访问,链表不行。2:顺序表尾插效率高,头插(删)或者中间位置插入(删除)时链表效率更高。3:顺序表的CPU高速缓存利用率高,链表的CPU高速缓存利用率低。顺序表和链表的适用场景 适用于需要大量访问元素的 而少量增添/删除元素的程序; 适用于需要进行大量增添/删除元素操作 而对访问元素无要求的程序。#
2017-09-23 20:00:50 186
原创 单链表
#pragma oncetypedef int DataType;typedef struct Node{ DataType data; struct Node* next;}Node;void PrintList(Node* pHead);void PushBack(Node** ppHead, DataType x);void PopBack(Node**
2017-09-23 19:55:48 143
原创 顺序表
#includetypedef int DataType;#define N 100typedef struct SeqList{ DataType array[N]; size_t size;}SeqList;void InitSeqList(SeqList* s);void PrintSeqList(SeqList* s);void PushBack(
2017-09-13 21:41:39 160
原创 预处理
#include#include#define MAX(x,y) ((x)>(y)?(x):(y))int main(){ int a = 10; int b = 20; int max = 0; max = MAX(a,b); printf("max = %d\n",max); system("pause"); return 0;}
2017-08-29 15:32:41 470
原创 数组作业
一维数组创建:type_t arr_name[const_n] // type_t是指数组的元素类型,const_n是常量表达式,指定数组大小例如: int arr[10];一维数组的初始化:创建数组时同时给数组内容一些合理初始值例如: int arr[10] = {1,2,3,4,5}; char ch[] = "abc";一维数组的使用:#i
2017-08-06 23:15:36 470
原创 第七次作业
// 乘法口诀表 //#include#includevoid Mul(int input ){ int i = 0; for(i=1;i { int j = 0; for(j=1;j { printf("%2d * %2d =%3d ",j,i,j*i); } printf("\n"); }
2017-08-06 20:53:05 190
原创 memcpy和memmove的模拟实现
// memcpy //#include#include#includevoid* my_memcpy(void*dest,const void*src,int count){ void*ret = dest; assert(dest!=NULL); assert(dest!=NULL); while(count--) {
2017-08-02 23:41:25 226
原创 strstr函数模拟实现
#include#include#includechar* my_strstr(const char*str1,const char*str2){ char*cp1 = (char*)str1;char*cp2 = (char*)str2;char*str = NULL;assert(str1!=NULL);assert(str2!=NULL);if(
2017-08-02 23:29:09 218
原创 strcpy等函数的模拟实现
// my_strcpy#include#include#includechar* my_strcpy(char*dest,const char*src){char*ret = dest;assert(dest!=NULL);assert(src!=NULL); while(*dest++ = *src++){ ;}
2017-07-30 22:53:02 226
原创 strlen的三种实现方式
#include#include#includeint my_strlen(const char*str){ //1.指针-指针const char*start=str;assert(str!=NULL); while(*str++) ;return str-start-1;//2.计数器int count = 0;assert(
2017-07-30 22:26:39 477
原创 扫雷的简单实现
// test.h#ifndef __GAME_H__#define __GAME_H__#include#include#include#include#define DEFAULT_COUNT 10#define ROW 10#define COL 10#define ROWS (ROW+2)#define COLS (COL+2)void I
2017-07-30 21:20:20 226
原创 三子棋的简单实现
// tset.h#ifndef __GAME_H__#define __GAME_H__#define _CRT_SECURE_NO_WARNINGS#include#include#include#include#define ROW 3#define COL 3void Display(char arr[ROW][COL],int row,int
2017-07-30 21:14:54 339
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人