STL/SOCKET/C++流/多线程/正则表达式

来源:互联网 发布:机锋市场 淘宝 编辑:程序博客网 时间:2024/06/15 15:11

假期一个半月就这么过完了,虽然天天都是百无聊赖的看电影、玩游戏,本来打算看一遍《c++primer》结果只看了两三页。我发现想到需要用什么了再去网上搜、书上找资料等,然后实际操练写出代码来,这样学习的效率最高。比起一天天的抱着一本《零起点学通C++》,从第一页开始顺着页码往后看效率要高多了。兴趣是最好的老师,按着页码顺序看一本C++书籍的时候,往往会觉得有些章节暂时没什么兴趣,看了也写不出来,枯草无味而学习效率大大折扣。其实我们完全可以跳着看,不感兴趣的章节随便翻一翻,知道它是个什么,干什么用的就行了。等我们遇到问题需要的时候再来细看,这样记忆十分深刻,效率大大提高。

来说下这个假期里接触到的这些技术吧:

STL:

STL是个好东西啊,我之前居然不知道STL是干嘛用的。在学完了C++基础后就直接看MFC了,以至于我在写一个MFC程序时需要用一个动态变大的结构体数组时,居然想到了手动创建一个单链表来存放结构体。然后在网上查资料后知道STL中的list容器,用了以后觉得十分的好用。了解了一下STL发现,其实我们在编程中遇到的一般的数据结构和算法问题,都可以把STL直接拿来用,十分方便。这个得好好学学,我发现我对C++标准库是一无所知啊,这么好的跨平台的东西,要深入研究!虽不说看《STL源码剖析》,至少也要看《C++标准程序库》吧。先学会学通了再说,从学会用C++模板到学会开发C++模板。

SOCKET:

网络编程,我是一无所知啊,我感兴趣的那些软件,什么QQ农场助手,QQ账号自动注册机,这些都是和网络、网络协议紧密联系的。我一直想做一个程序,能模拟在网页上的填表-提交操作,后来在网上查资料,知道这个网页的提交时HTTP协议的,有GET和POST提交方式。我连网络编程、网页编程都一无所知,更不要说这些协议了,看了很多资料,还是一头雾水,慢慢来吧。我知道MFC里有个CHttpConnection类可以连接HTTP服务器,但是关于这个类网上和书上的资料都比较少。尤其是书上,基本没有哪本书讲到这个类。只能是自己慢慢琢磨吧。QQ农场是Flash AS和网页交互,它和服务器通信也应该是基于HTTP协议吧,如果能开发出一个稳定、强大、好用的QQ农场助手来,肯定是能赚RMB的。姑且不说自己经营,开站,挂广告什么的,就是直接卖源码也能卖钱。

C++流:

从第一天学习C++就接触到了输入输出流iostream,这个看似简单的东西,实际上很强大啊。就单单一个stringstream字符串流,也可以超级简单的进行字符串与各种数据类型的转换,想想我以前一直用C的atoi() itoa()什么的,哎。stringstream字符串流真是太强大太方便了,一个<<和>>运算符,想要什么流进去,流出来,就OK了。前几天就遇到一个问题,要把一个中文字符转换为表示这个字符的16进制UNICODE码字符串,其实这个问题可以自己写代码来实现,但自己写的一是怕麻烦,二是怕可靠性不高。C标准里itoa() atoi()系列都没法实现,后来用winAPI字符处理函数StrToIntEx解决了,但这并不是最好的方法,而且很麻烦,也不跨平台。后来才发现stringstream字符串流处理这种问题真是易如反掌。要好好学习学习。标准库里好东西太多了。

多线程:

多线程是个好东西啊。我之前写的一个文本处理程序,在处理上千个文本文件时出现了界面假死的情况,后来才知道要用多线程来处理。不过《MFC windows程序设计》上说,这种情况并不是非得用多线程不可,可以用消息泵。在主线程处理消耗时间较长的任务过程中,通过代码,让它每执行一会儿就抽空检查消息队列,如果有待处理消息就先处理完这些消息,这样就不会出现界面假死了。但再后来的开发过程中,我一次也没有使用过这种方式,因为多线程用起来实在比较爽,以至于我忘了这种消息泵的方法。第一次学习多线程的同时我就写了个SQL密码暴力破解器,果然是技术不行,毕竟刚接触,开发过程中调试崩溃N次啊。以至于从来不使用全局变量的我,一口气就用了七个全局变量,才没有出现崩溃。多线程好用,但是要注意很多啊,容易引发各种问题或潜在问题。在这过程中我深刻认识到一点,如果在线程中new了一个变量,把指针通过消息传到主线程里,如果主线程使用这个变量时,new它的线程已经结束掉了(注意,并没有delete啊),就会出现崩溃。估计即使没有delete,线程结束后,在线程就new出来的内存空间都被windows回收了。就像一个进程,即便发生了内存泄露,如果结束这个进程后,windows也会回收泄露掉的内存。自从接触多线程后,我写的程序中如果不用多线程都会觉得心里痒痒的,我总是乐此不彼的在几台电脑上测试我的多线程程序,分析单线程和多线程的处理速度差异,发现使用多线程后很多任务处理速度都可以大幅度提升!爽啊!C++11新标准里C++本身也可以支持多线程了,可喜可贺。也正是接触了多线程,我才知道了CPU多核心的性能是那么的强大,我恨不得把我那速龙双核的CPU换成八核的FX8120,毕竟才800多元啊,八核啊!用来跑多线程程序肯定爽。不过我之前写的SQL暴力破解器,四线程的,在I3这种双核四线程处理器下,只有两个模拟核心稳定占用,一个模拟核心忽高忽低,一个模拟核心基本不占用。我原本以后四核模拟核心会平均分配四个线程,但windows显然不是这样分配的。关于windows核心的东西还得多学学,前几天买的一本《windows核心编程》马上就要到了。

正则表达式:

字符串处理是编程过程中经常遇到的问题。我一直想写一个QQ相册批量下载器,网页图片自动保存器什么的,思路就是打开网页HTML文件检索图片的URL连接,这个用正则表达式就比较方便了。之前还去BOOST库里找正则表达式库,后来发现VC++2010里已经有C++标准的正则表达式库了#include <regex>,这个得好好学学,处理文本处理字符串就靠它了。

总结:

多动手,多开发一些实际的软件,在开发过程中发现问题,解决问题,进步得会很快。同时要抓基础,对于标准库和网络基础这块要花时间看,不然遇到问题了连个用什么去解决的思路都没有,查资料都不知道要怎么查。