关于C++学习的几个建议
2009-11-02 10:04
387 查看
常听人问编程一般是C++或者java该怎么学,我想说几点误区:
1.
自我安慰型,一些编程没什么基础,刚开始想学编程的人,通常是这样的:
觉得自己该动手学习下编程,买了一本书,一般是C++ primer或者core java, 一天看了几页或者十几页,自我安慰觉得自己就是在学习编程了,我对他们的建议是,你一天不看一百页,至少五十页那根本就是没有进展,纯粹自我安慰,觉得自己学到东西,那真只能是阿Q,留学生很多都是考过G的,当年背红宝书的时候,如果你一天背一两页,那一年也背不完,背到后面也忘了前面;
2.
一些人觉得自己本科学过C++,以为自己就会编程了,结果碰到一个问题就是需要一个程序运行期才能确定大小的数组就没辙了,因为数组必须在编译时期确定大小。首先,你应该能够想到链表list,这是本科二年级水平,其次,你应该知道C++里有STL,如果你没有听过,而且你是计算机系的,同学,请你反省一下。STL里有动态数组就是vector, 可以任意在运行时增长,当然有一些overhead, 碰到capacity不足,会有重新分配更大空间和拷贝原来内容至新空间的过程,但如果你能够预计到大小,建议用reserve(size)方法,就是预留size大小的capacity,减少上述过程。当然,STL 不止提供动态数组vector,也有链表list, 其次最常用的就是map, 其实就是script语言里的associate array, key-value pair, 通过key来直接访问value,
C++ STL里map的实现是用balanced tree,所以访问速度是logN,相当之快的,比起自己去实现一个容易出错的tree实在是方便很多;还有set, multiset, multimap, 通过这些数据结构的组装可以容易达到自己的数据结构需要(除非有非常特殊的需要)
3.
所以我觉得作为一个计算机专业或者立志于从事IT软件行业的人,并且你主要语言是C++, 如果你不知道STL,你的C++水平最多三成,如果你不懂OS(Windows或者Linux/Unix)工作原理和system call, 你的C++水平最多也只有六成,因为C++是离不开OS的,就像鱼离不开水,你的任何C++程序都是运行在OS上一层,了解下一层的OS的工作原理和进程调度,内存分配(堆/栈),进程通信IPC都是十分必要的。
这是我的CSDN blog的首篇原创,多谢支持!
1.
自我安慰型,一些编程没什么基础,刚开始想学编程的人,通常是这样的:
觉得自己该动手学习下编程,买了一本书,一般是C++ primer或者core java, 一天看了几页或者十几页,自我安慰觉得自己就是在学习编程了,我对他们的建议是,你一天不看一百页,至少五十页那根本就是没有进展,纯粹自我安慰,觉得自己学到东西,那真只能是阿Q,留学生很多都是考过G的,当年背红宝书的时候,如果你一天背一两页,那一年也背不完,背到后面也忘了前面;
2.
一些人觉得自己本科学过C++,以为自己就会编程了,结果碰到一个问题就是需要一个程序运行期才能确定大小的数组就没辙了,因为数组必须在编译时期确定大小。首先,你应该能够想到链表list,这是本科二年级水平,其次,你应该知道C++里有STL,如果你没有听过,而且你是计算机系的,同学,请你反省一下。STL里有动态数组就是vector, 可以任意在运行时增长,当然有一些overhead, 碰到capacity不足,会有重新分配更大空间和拷贝原来内容至新空间的过程,但如果你能够预计到大小,建议用reserve(size)方法,就是预留size大小的capacity,减少上述过程。当然,STL 不止提供动态数组vector,也有链表list, 其次最常用的就是map, 其实就是script语言里的associate array, key-value pair, 通过key来直接访问value,
C++ STL里map的实现是用balanced tree,所以访问速度是logN,相当之快的,比起自己去实现一个容易出错的tree实在是方便很多;还有set, multiset, multimap, 通过这些数据结构的组装可以容易达到自己的数据结构需要(除非有非常特殊的需要)
3.
所以我觉得作为一个计算机专业或者立志于从事IT软件行业的人,并且你主要语言是C++, 如果你不知道STL,你的C++水平最多三成,如果你不懂OS(Windows或者Linux/Unix)工作原理和system call, 你的C++水平最多也只有六成,因为C++是离不开OS的,就像鱼离不开水,你的任何C++程序都是运行在OS上一层,了解下一层的OS的工作原理和进程调度,内存分配(堆/栈),进程通信IPC都是十分必要的。
这是我的CSDN blog的首篇原创,多谢支持!
相关文章推荐
- C++学习笔记001-关于cin的几个用法
- 【C++学习笔记】关于预处理器的几个问题
- 关于动画特效师学习Python还是C++的几个分析(别人的)
- 关于学习C++和编程的50个建议和观点
- 【转】关于学习C++的若干建议
- 关于新手学习帝国之类的CMS工具建议
- 关于C++用法的学习心得
- 18、深入浅出MFC学习笔记,关于C++
- 关于学习C++和编程的50个观点
- 关于C++内存分区的学习
- Inside The C++ Object Model 学习笔记 -- 关于对象
- 关于学习c++和编程的50个观点:
- 改善C++ 程序的150个建议学习之建议 9:防止重复包含头文件
- 改善C++ 程序的150个建议学习之建议15:尽量不要使用可变参数
- 学习C++的建议
- 改善C++ 程序的150个建议学习之建议22:灵活地使用不同风格的注释
- C/C++中关于地址、指针和引用变量的学习笔记(十) : 引用型变量
- Kingofark关于学习C++和编程的50个观点
- Kingofark关于学习C++和编程的50个观点2003修订版
- STL学习小记--与C++模板相关的几个特性