充分利用C++的优势解算法题

2020-01-14

最近刷算法题的过程中,时常会上网搜索别人的解法,发现其实很多人根本没有正确使用C++语言,好多地方还用的是C语言的写法,不仅繁琐,而且降低了可读性。我根据网上的错误总结了一些经验,并且将会不断更新:

使用cin而不是scanf输入数据

C++的数据输入方式太方便了,一个cin就能解决一切,然而有些人用着C++语言却还是用scanf的方式进行数据的输入,实在是暴殄天物。根据实践发现,scanf有时候可读性更高,而且据网上的一些说法说scanf的输入效率是cin的3至4倍,处理大数量级的输入时用cin可能超时,因此还得根据具体情况使用。另外对于输出,有的时候printf可能也更加方便一些,比如之前的题目里就有保留一位小数输出,这个时候用cout反而不如用printf。

声明结构体时不需要写typedef

C++声明结构体和C语言不同,直接写

struct node
{
	//data
};

即可。在定义结构体变量的时候也只需要直接写node a;就行了。而网上好多人在用C++的同时还在用typdef给结构体起别名,这是C语言中的写法,C++中完全不需要。

使用new而不是malloc来动态分配内存

malloc是C语言中的写法,而且较为复杂。以定义动态数组为例,如果用malloc的话,写法是int *a = (int *)malloc(sizeof(int)*n);,而如果是用new定义的话,只需要写int *a=new int[n];即可。

充分利用vector的优势

vector真乃神器也,我前面也多次说过了,真的太好用了。初始化的时候可以确定大小,也可以不确定,使用push_back()方法动态添加数据。就算一开始不确定大小,之后还可以使用resize()方法重新确定vector的大小。当不断往里面增加元素时,它会自动分配新的内存空间。使用insert()方法还可以在中间任何位置插入元素。