c/c++
文章平均质量分 73
每天进步一点点
f2016913
一个专业小白的奋斗之路
展开
-
面试常见的“套路”之--两个数的交换
方法一:借助第三数,来交换两个数。#include#includeint main(){ int a = 2; int b = 3; int c = 0; c = a; a = b; b = c; printf("a = %d\nb = %d\n", a, b); system("pause"); return 0;}方法二:算术运算。#include#inc原创 2016-09-21 23:08:33 · 490 阅读 · 0 评论 -
C语言-在一个数组中找到一个数之sizeof的用法。
1.在一个数组中找到一个数:#include#includeint main(){ int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int key = 10; int left = 0; int right = sizeof(arr) / sizeof(arr[0]) - 1;//下标数 while (left <= right)原创 2016-09-25 12:37:40 · 1005 阅读 · 0 评论 -
你所不知道的“三个数从大到小的顺序输出”之—对if (else)条件语句的运用。
把三个数从大到小的顺序输出,可能会一个一个的比较,这个会很麻烦,大多数情况下,都是两两比较然后和第三个数再比较大小,此程序主要是对条件语句的熟练应用。#define _CRT_SECURE_NO_WARNINGS#include#includeint main(){ int data1 = 0; int data2 = 0; int data3 = 0; printf("pl原创 2016-09-26 18:47:07 · 4142 阅读 · 0 评论 -
C语言之输出一个数的每一位,和获取一个二进制数所有奇数和偶数位,输出二进制序列的区别。
1:输出一个整数的每一位。输出一个整数的每一位是对其操作数从低位到高位输出。#include#include int main(){ int data = 0; int arr[10];//定义一个整形数组; int count = 0; printf("please enter data:"); scanf("%d",&data); while (data)//这个数原创 2016-09-27 23:59:33 · 2615 阅读 · 0 评论 -
常见的字符串函数之strlen函数,strcpy函数,strcat函数的实现;
字符串是一种重要的的数据类型1.字符串长度strlen函数字符串的长度就是计算它包含的字符的个数。库函数strlen的在MSDN中原型如下:size_tstrlen( constchar *string);头文件如计算数组长度:#includesize_t strlen(char const *string){ int lengh = 0;原创 2016-10-16 17:27:34 · 669 阅读 · 0 评论 -
数据类型之char型溢出的讨论。
数据类型:1.内置类型(C本身): 整形,浮点型,字符型。2.构造类型(自定义类型):数组,结构体,枚举。3.指针类型。4.空类型。头文件limis.h定义了不同的整形类型。二.字符型。主要分为char,unsiged char 和signed char型。如何判断三个类型的大小呢,一般情况用关键字sizeof来求其类型的长度。如:#de原创 2016-10-26 17:36:27 · 5572 阅读 · 0 评论 -
C语言之——左旋字符串
如:ABCDE左旋一位是BCDEA;左旋两位是CDEAB。方法一:循环左移法。先将第一次字符拿出,然后将后面的字符依次向左移1位,刚好最后一个字符空出,把第一个字符放入,当然这里面考虑到这个字符串的长度,多次操作可以用移的步数和字符串的个数取%来计算。#define _CRT_SECURE_NO_WARNINGS#include#include#include#include原创 2016-10-31 22:12:45 · 785 阅读 · 0 评论 -
C语言之-找一个数组只出现一次的两个数
在一个数组中找到单独出现两次的数字。具体方法是:异或之后的结果的分类遵循两种情况,找到异或结果0,1序列最低比特位的非零位相同的数据被分到相同的组,不同的数据被分到不同的组。这样问题就被简化成为了两个子问题,在每一个里面找到只出现一次的那个数。分为三个步骤:1.所有数据异或得到结果序列2.找到异或结果最后一个非零比特位,把位置记录下来。3.根据非零比特位的位置进行分类。原创 2016-11-07 17:12:07 · 735 阅读 · 0 评论 -
数组和指针
一.数组和指针int arr[5];int *p;首先要搞清楚数组是什么?数组表示相同数据类型的数的集合,arr[5]表示有5个整形元素的集合。p是变量,对于变量可以理解为左值,编译器会开辟一块内存空间,然后在这个空间存上其所指的内容。*表示解应用。可以形象理解为:如果你回家开门,需要钥匙打开,此时”*“就充当钥匙的功能,同样在指针中有了*,才会读取其所指向地址的内容。数原创 2016-11-15 19:46:49 · 504 阅读 · 0 评论 -
C语言之--结构体内存对齐
一、聚合数据类型:数组和结构体。数组是相同数据类型的集合,它的每个数据元素可以通过下标或者是指针间接访问,而结构体的不同点是它是不同元素类型的数据的集合。结构体不能通过下标来访问原因是它的每个成员(元素)的类型不同,长度不同。它们可以通过名字来访问。结构体的声明:struct tag{ int a; short b; char c;}x;tag标签可以原创 2016-11-19 00:43:44 · 481 阅读 · 0 评论 -
实现不同类型的冒泡排序
一、按照qorst函数的原理实现不同类型的数组的排序。qorst函数是库函数,可以实现快速排序。在MSDN下类型为void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );头文件是stdilb.h。该函数的参数主要包括四个部分:1、 代排序数组的首地址原创 2016-11-21 12:37:41 · 1247 阅读 · 0 评论 -
函数与宏
一、函数1.函数定义:就是函数体的实现。函数体就是⼀个代码块。他在函数被调⽤的时候执行。2。函数声明(函数原型):函数声明出现在函数被调用的地方。函数声明向编译器提供函数的相关信。用于函数被正确的调用。函数包括:类型,函数名(),代码块int fun(){ printf("hello world ");return 0;}return 语句1.表明函数正确执行到函数调原创 2016-11-24 22:05:06 · 421 阅读 · 0 评论 -
计算器
简易计算器:能够实现加减乘除的功能。方法一:函数指针的数组实现:#define _CRT_SECURE_NO_WARNINGS 1#include#include#includeint add(int x, int y){ return x + y;}int sub(int x, int y){ return x - y;}int mul(int x, in原创 2016-11-24 22:09:42 · 523 阅读 · 1 评论 -
C语言常见陷阱之“纠缠不清的位域”
一.表达式求值--整数类型提升问题:#define _CRT_SECURE_NO_WARNINGS 1#include#includeint main(){ char c; unsigned char uc; unsigned char us; c = 128;// -128-0-127; uc = 128; us = c + u原创 2016-12-01 09:34:26 · 4540 阅读 · 3 评论 -
C语言实现简单通讯录
实现一个通讯录;通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:1. 添加联系人信息2. 删除指定联系人信息3. 查找指定联系人信息4. 修改指定联系人信息5. 显示所有联系人信息6. 清空所有联系人7. 以名字排序所有联系人头文件:#include#includ原创 2016-12-06 10:45:16 · 727 阅读 · 1 评论 -
顺序表
顺序表的是计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。顺序表是将表中的元素(节点)一个接一个存入一组连续的存储单元中。静态顺序表,大小已知,实现基本的增删改查。由于顺序表是一个依次存储的线性结构,在插入或者删除节点时可以有头插头删,尾插尾删。我们可以定义一个结构体,用来保存表的数据和数据的个数。头文件#define原创 2016-12-12 15:09:46 · 459 阅读 · 0 评论 -
DAY I
C语言的基础学习,本文主要介绍判断闰年。已经输出一个乘法口诀表。原创 2016-09-14 12:10:53 · 376 阅读 · 1 评论 -
开始进行C语言学习的一些基础东西,关键字”代码行“,”空行的使用“,”注释“,”代码行内的空格“等等
一、头文件的结构:1.头文件的作用是起声明而不是定义2.预处理快。防止头文件被重复调用。3.函数和类结构的声明如#include.就是对一个标准的输出输入函数的声明二、空行的作用1.程序更加清晰,便于理解和纠错。2.一般只有的在一个完整的逻辑语句或者一个函数定义后加空行如if { 语句\表达式 } Else;//空行原创 2016-09-17 18:06:11 · 1551 阅读 · 0 评论 -
知名互联网公司面试题之--将一个数按照二进制输出,并且输出1的个数。
方法一:求余法#include#includeint main(){ int num = 9; int count = 0; int count_one_bits(int num); while (num) { if (num % 2 == 1) count++; num = num / 2; } printf("count = %d", count); s原创 2016-09-22 00:23:10 · 630 阅读 · 0 评论 -
预处理,宏,隐藏在背后的编译和链接
一.预处理器:在编程的时候,第一个步骤就是预处理;就是编码之前对其进行文本性的操作。主要有四个作用1.宏替换2.头文件的展开3.去注释4.条件编译是否有过这种经历,编译的代码自己不满意,过段时间要找,然后找了很长时间,这是可以通过程序找到当时代码的目录文件,日期,以及行数和时间 都可以,这时候就可以用上常见的这些预处理标示符。#define __FILE__ //编译的原创 2016-10-19 00:29:06 · 481 阅读 · 0 评论 -
C语言之---mommove函数的研究
0.1版本#define _CRT_SECURE_NO_WARNINGS 1#include#include#include#includevoid *memmove(char *dst, char *src,int count){ assert(dst); assert(src); assert(count > 0); while (count--) { *dst+原创 2016-11-08 16:26:57 · 2165 阅读 · 0 评论 -
指针和引用
一:C++的关键字二.c++的数据类型:内置类型:c++中基本的数据类型,表示语言内部本身已定义的类型。自定义类型:表示使用class/enum/struct/union自己定义的类型。在前面的学习中我们知道,不同数据类型的集合结构体可以实现,三.命名空间,为了解决全局命名冲突(同名冲突)的问题。命名空间它相当于一个更灵活的作用域,以关键字names原创 2016-12-17 22:40:40 · 334 阅读 · 0 评论 -
全网优秀的IT博客
转自:http://blog.csdn.net/gatieme 感谢分享博客导航linuxlinux全线教程–提供了Linux教程,服务器管理教程,BSD教程,还有编程语言(C/Java/Python/Perl),以及网络等全栈学习教程存储技术NoSQLFan–关注NoSQL相关的新闻与技术刘爱贵的专栏–中科院博士,长期从事存转载 2017-02-07 13:20:55 · 778 阅读 · 0 评论 -
Sting类的实现
一.浅拷贝class String{public: String(const char *str ="") :_str(new char[strlen(str) + 1]) { strcpy(_str, str); } s2 (s1) String(const String &s) {原创 2017-02-15 15:17:06 · 2216 阅读 · 0 评论 -
菱形虚拟继承和多态
一.菱形继承(多继承)class AA{public: int _aa;};class BB : public AA{public: int _bb;};class CC : public AA{public: int _cc;};class DD :public BB, public CC{public: int _dd;原创 2017-02-16 00:09:34 · 850 阅读 · 0 评论 -
C++对象模型
一.单继承的对象模型class Car{public: virtual void func1() { cout << "Car::func1()" << endl; } virtual void func2() { cout << "Car::func2()" << endl; }protected:原创 2017-02-16 23:51:30 · 356 阅读 · 0 评论 -
模板实现顺序表
一.模板模板就是实现与类型无关的代码,增加了代码的复用性。模板分为模板函数和模板类模板函数的格式 typedef原创 2017-02-20 10:53:06 · 463 阅读 · 0 评论 -
面试常见题之虚函数及底层的实现
一.菱形对象模型(成员函数+虚函数的覆盖)class AA{public: virtual void fun1() { cout << "AA::fun1()" << endl; }public: int _aa;};class BB :public AA{public: virtual void fun1()原创 2017-02-21 09:50:55 · 771 阅读 · 0 评论 -
智能指针
一.RAII(资源分配即初始化)就是定义一个类来进行资源的分配和释放,在构造函数完成资源的初始化,在析构函数完成资源的清理和释放。可以保证资源的正确初始化和释放。using namespace std;templateclass AA{public: AA() { cout << "AA()" << endl; } ~AA()原创 2017-02-23 11:02:52 · 488 阅读 · 0 评论 -
c++强制类型转换
一:C语言常见的强制类型的转换有两种隐式类型的转换和强制转换所谓的隐式类型的强转就是相近的类型的转化,强制转换就是讲类型如下:int main(){ int i = 1; double j = i; printf("%d,%2f\n", i, j); //隐式 int *p = &i; int address = (int)p://强转原创 2017-02-27 17:04:38 · 542 阅读 · 0 评论 -
【c++】模板实现vector和list
前面我们也知道模板是泛型编程的基础,是实现类型无关的代码,是一种代码复用的重要手段。一:模板实现Vector:.h文件#pragma once #include#include#includeusing namespace std;templateclass Vector{public: //构造 Vector()原创 2017-03-02 13:31:51 · 694 阅读 · 0 评论 -
c++中重载,覆盖和隐藏的区别
一:重载 在c++中把几个语义,功能相似的几个函数用同一个函数名表示; 为什么要重载呢? 1:函数名被重载,函数重载便于记忆,提高了函数的易用性, 如:void fun(int );void fun(float);void fun(char);2:C++类中的构造函数需要重载机制,c++规定类的构造函数的名字必须与类名相同;那么如何实现几种不同的方法来创建对象,这就需要重载机制来实现;原创 2017-03-28 15:07:21 · 497 阅读 · 0 评论 -
面试题之--复杂链表的复制
复杂链表的复制: 复杂链表除了有一个next指针还有一个random指针 我们可以画一个图来表示 复杂链表的声明:struct ComplexNode{ ComplexNode(const int&data) :_next(NULL) , _random(NULL) , _data(data) {} ComplexNode* _next;原创 2017-04-10 13:59:50 · 481 阅读 · 0 评论 -
reserve和resize的区别
1:存储空间重分配的问题:我们知道存储空间分配的问题起源于容器对象的动态创建和连续存储的特性;因此只有连续存储的容器才可能需要运行时的存储空间分配;典型就是vector,其他连续存储容器也会部分地需要存储空间冲分配;第一种:如vector,其元素保存在连续的存储的空间上,当向该vector中插入一个新元素时,必须保持新的容器仍然满足元素连续存储的条件;这时候就要重新分配存储空间,平且把原创 2017-04-10 17:38:03 · 2065 阅读 · 0 评论 -
链表面试题--从尾到头打印单链表
题目:输入一个链表的头结点,从尾到头打印单链表 链表结点的定义:struct LinkNode{ int val;ListNode *next;}方法一://递归实现void PrintListTailToHead(struct ListNode *head){ if (head != NULL) { if (head->next != NULL)原创 2017-04-11 20:54:06 · 678 阅读 · 0 评论 -
C++静态绑定和动态绑定
一:静态绑定与动态绑定 静态绑定:编译时绑定, 通过对象调用 动态绑定:运行时绑定,通过地址实现 多态–简单是意思是多种状态 静态多态:a:函数多态(重载) b:模板多态(类模板和函数模板) 动态多态: a:虚函数机制;b:RTTIclass Base{public: virtual void fun() { cout << "Base:原创 2017-04-18 19:27:40 · 3360 阅读 · 0 评论 -
为什么基类的析构函数定义为虚函数
前提: 1:每个析构函数只会清理自己的成员(成员函数前没有virtual)。 2:可能是基类的指针指向派生类的对象,当析构一个指向派生类的成员的基类指针,这时程序不知道这么办,可能会造成内存的泄露,因此此时基类的析构函数要定义为虚函数; 基类指针可以指向派生类的对象(多态),如果删除该指针delete[]p,就会调用该指针指向的派生类的析构函数,而派生类的对象又会自动调基类的成员函数,这样就会原创 2017-04-20 21:16:23 · 4275 阅读 · 0 评论 -
链表面试题--合并两个有序的链表
问题:合并两个有序的链表,合并后结果任有序 非递归实现:两个指针分别遍历两个链表,然后比较两个指针大小,将小的节点取下放到合并后的新链表中,继续向后移动当前的指针,若两个链表至少有一个表扫描走完,走将对应的另一个表,整体添加合并后的新表中,这样就可以实现链表的合并。 方法一:ListNode* MergeList1(ListNode*l1, ListNode*l2){ if (l1原创 2017-04-21 11:53:52 · 1203 阅读 · 0 评论