大傻与小火机写字的地方


  • 首页

  • 分类

  • 归档

  • 关于

  • 标签

引用 数组引用与指针引用 值传递\引用传递\指针传递

发表于 2018-04-05 | 分类于 再学C++ |

引用

引用是给一个变量起别名,引用没有自己独立的空间,引用要与它所引用的变量共享空间。引用在定义的时候要进行初始化,引用一经初始化,不能重新指向其他变量

const 引用

const引用是指向const对象的引用

const int ival = 1024;
const int& refVal = ival; //ok:both reference and object are const
int &ref2 = ival;         //error:nonconst reference to a const object 防止对引用的更改,更改了const对象

int ival = 1024;
const int& refVal = ival; // ok
阅读全文 »

域运算符 new/delete 函数重载 name mangling与extern "C" 带默认形参值的函数

发表于 2018-04-04 | 分类于 再学C++ |

域运算符

C++作用域标识符 ::

  1. 用于对与局部变量同名的全局变量进行访问
  2. 用于表示类的静态成员

new/delete 运算符

new运算符
指针变量 = new 数据类型(a) 初始化数值为a
指针变量 = new 数据类型[长度n] 指针的销毁:delete []

new一个对象
内存分配(operator new),类似malloc
调用构造函数

delete一个对象
调用析构函数
释放内存(operator delete),类似free

阅读全文 »

最长回文子串

发表于 2018-02-26 | 分类于 面试算法 |

问题

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example:

Input: "babad"

Output: "bab"

Note: "aba" is also a valid answer.
阅读全文 »

旋转字符串

发表于 2017-09-06 | 分类于 面试算法 |

问题

给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”
要求:时间复杂度为 O(n),空间复杂度为 O(1)
阅读全文 »

反转字符串

发表于 2017-09-05 | 分类于 面试算法 |

问题

输入一个字符串,一个单词一个单词地反转。例如:

Given s = "the sky is blue",
return "blue is sky the".
阅读全文 »

char *a 与 char a[]的区别

发表于 2017-08-31 | 分类于 C/C++ |

数组名与指针

首先,指针就是指针,数组就是数组。两个是不同的东西。这两个概念之所以经常被混淆,是因为编译器把数组名当作指向该数组第一个元素的指针。正是由于数组即数组的本身属性,使用&操作符取的是数组的地址,sizeof()的操作数得到的是整个数组的大小,而不是所指向第一个元素的大小。

#include <stdio.h>

int main(void)
{
    char str[]="abcd";

    printf(" (*str) = %c \n",*str);
    printf(" addr (str[0]) = %#x \n",&(str[0]));
    printf(" addr (str[1]) = %#x \n",&(str[1]));

    printf(" addr of arrary param = %#x \n",&str);
    printf(" sizeof str = %d \n\n",sizeof(str));
    return 0;
}

指针声明和数组声明

首先看一段崩溃代码,Segment Default报错。指针声明和数组声明若没弄清楚,分分钟让你掉坑里。

#include <iostream>
using namespace std;

int main()
{
    char *chas = "ABCDE";
    char chas_1[] = "ABCDE";
    chas[0] = 'X';
    chas_1[0] = 'X';
    return 0;
}

上面代码崩溃的原因是:*chas = "ABCDE"存放在常量区是无法修改的(chas的指针值存放在栈中。而数组是局部变量,存放在栈中,是可以修改的。

这两种变量的内存布局的不同,导致了指针声明和数组声明有以下区别:
”读“ ”写“ 能力
char *a = “abcd”; 此时”abcd”存放在常量区。通过指针只可以访问字符串常量,而不可以改变它。
而char a[20] = “abcd”; 此时 “abcd”存放在栈。可以通过指针去访问和修改数组内容。

赋值时刻
char *a = “abcd”; 是在编译时就确定了(因为为常量)。
而char a[20] = “abcd”; 在运行时确定

存取效率
char *a = “abcd”; 存于静态存储区。在栈上的数组比指针所指向字符串快。慢
而char a[20] = “abcd”; 存于栈上。快

再看看下面代码

 //合法
 char a[]="abcde";
 char *b;
 b = a;

 //不合法
 char *a="abcde";
 char b[6];
 b = a;

char[] 可以隐式转换成 char*,所以合法。不存在隐式转换使得 char* 被转换成 char[],char[] 类型的变量不能被赋值,数组不能作左值,所以不合法。

表达式求值

发表于 2017-04-30 | 分类于 面试算法 |

问题

输入一个中缀表达式,包括+,-,*,/,(,) 的四则运算,求其计算结果
例如:表达式((3+5*2)+3)/5+6/4*2+3的结果为8
阅读全文 »

字符串相似度(编辑距离)

发表于 2017-04-23 | 分类于 面试算法 |

问题

许多程序会大量使用字符串。对于不同的字符串,我们希望能够有办法判断其相似程度。我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法为:
1.修改一个字符(如把“a”替换为“b”)。
2.增加一个字符(如把“abdd”变为“aebdd”)。
3.删除一个字符(如把“travelling”变为“traveling”)。
比如,对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加/减少一个“g“的方式来达到目的。上面的两种方案,都仅需要一次操作。把这个操作所需要的次数定义为两个字符串的距离,给定任意两个字符串,写出一个算法来计算出它们的距离
阅读全文 »

冒泡排序与归并排序

发表于 2017-04-16 | 分类于 数据结构与算法 |

归并排序

归并排序总体的时间复杂度为O(nlogn),合并有序子序列merge过程为O(n)。接下来我们重点来关注下合并过程。

合并过程示例图
ch1

阅读全文 »

两单链表相交的一系列问题

发表于 2017-03-25 | 分类于 面试算法 |

问题

单链表可能有环,也可能无环。给定两个单链表的头节点head1和head2,这两个链表可能相交,也可能不相交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null即可。

要求:
如果链表1的长度为 N,链表2的长度为 M,时间复杂度达到O( N+M),额外空 间复杂度请达到O(1)。
阅读全文 »
1…789…11
Shaojie Li

Shaojie Li

学习总结 思考感悟 知识管理

107 日志
15 分类
15 标签
RSS
© 2017 — 2019 Shaojie Li
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4