指针vs引用
指针:
指向值,但本身值为地址。
可以有null pointer,指向特殊地址0
初始化后可以被改变
引用:
相当于const指针,int& r = n等同于int *const r = &n
因为是int *const所以初始化之后,r本身的值不能改变,也就是不能改变它指向的地址了
关于int *const r:
表示一个常量指针,指向一个整数。
指针是常量:一旦初始化,指针本身的值(即它指向的地址)不能改变。
指向的数据是可变的:可以通过这个指针修改它指向的整数的值。
123456int value1 = 10;int value2 = 20;int *const ptr = &value1; // 常量指针,指向 value1,可以将const后面的(ptr)单独看,它是指针本身,所以是指针本身不能变,也就是ptr所储存的地址不能变*ptr = 15; // 这是可以的,因为可以修改指针指向的数据,所以也可以更改被引用的变量的值// ptr = &value2; // 报错,因为不能修改指针本身的值
相应的有const int *:
...
复制构造函数
复制构造函数的用途就是解决:当将数据从一个对象复制到另一个对象时,其中的指针数据成员没有被正确处理的情况。
如:12345678910struct Node{ char *name; int age; Node(char *n=" ", int a = 0) { name = strdup(n); // strdup是用来分配一个新的内存并返回该指向该字符串的指针 age = a; }}
当这样带char *name指针的对象,经历复制时,会遇到以下问题
12345678Node node1("node1", 10); // Create object node1Node node2(node1); // Create a node1 copy named node, 同样可写为: Node node2 = node1;strcpy(node2.name, "changedName"); // 将node2的name改为" ...
双指针算法
双指针算法主要思想:
帮助优化双循环算法,原本算法为O(n^2):
12for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j)
可以将算法优化为O(n),此时双指针就像弹簧一样,i在前面扯着j往前移动,然后check它们中间那一段是否合格:
12for (int i = 0, j = 0; i < n; ++i) while (j < i && check(i, j)) j++;
基础题给一个字符串,单词用空格隔开,输出每个单词
12345678910111213141516171819202122232425#include <iostream>#include <string>using namespace std;int main(){ string input; getline(cin, input); for (int i = 0; input[i]; i++) { // mark the ...
经典笔试刷题集合
牛客 HJ17 坐标移动(中等)开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。
输入:
合法坐标为A(或者D或者W或者S) + 数字(两位以内),坐标之间以;分隔。(如:A10;S20;W10;D30;X;A1A;B10A11;;A10;)
非法坐标点需要进行丢弃。如AA10; A1A; $%$; YAD; 等。
起点(0,0),A10 = (-10,0),S20 = (-10,-20)
数据范围:1 <= n <= 10000
1
参加SIG event day的搞笑事情
背景在通过SIG的笔试、HR电话面试之后(有关SIG的面试题和面试经历,请看SIG面试),收到了参加SIG办公室俩天参观的邀请,于是开开心心就去了,毕竟美国大投行公司,它的财力对我吸引力是非常大的,也很好奇有钱公司内部长啥样。也就开启了俩天的social娱乐。
过程SIG的参观活动包括:刚开始的破冰,大家一起吃早餐(白人早餐真的一般,但是咖啡和面包还是不错的),一群人一起坐个大桌子,一起聊天,然后会有HR工作人员到每个桌子参与聊天(纯闲聊,之前正值Taylor Swift在悉尼开了个演唱会,而且那个HR是粉丝,于是这个成为了主要话题)。
结束之后开始由团队做演讲,介绍公司、投行、公司团队结构和负责的事情,有提问环节,在介绍Trading思想时,也会插入跟股票相关的卡牌游戏环节,来方便理解。当然,之后还有赌博游戏,因为SIG这个公司的赌博文化很重,每年还会举行赌博游戏WIZARD的比赛(包含奖金的那种:>)。
第一天晚上,因为SIG把住宿和路费都包了,很豪华的酒店,就在悉尼歌剧院海湾附近的高楼里面,听住进去的人说晚上的夜景灯光非常漂亮,房间也很豪华(瞬间后悔为啥我要写我住悉尼),所 ...
有趣轶事
有趣轶事参加SIG event day的搞笑事情
面试过往
面试过往C++面试问题SIG grad tech面试的分享
C++笔记
Static关键字作用基本概念
使用目的:
在 C++ 中,需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见时,可将其定义为静态数据。
存放位置
DATA 段(全局初始化区)存放初始化的全局变量和静态变量;BSS 段(全局未初始化区)存放未初始化的全局变量和静态变量。其中BBS段在程序执行之前会被系统自动清0,所以未初始化的全局变量和静态变量在程序执行之前已经为0。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。
使用static的优势:
可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的。即静态全局变量不能被其它文件所用;其它文件中可 ...
开发杂记
开发杂记C++笔记指针vs引用复制构造函数函数指针多线程Thread的join函数方法