1、基础知识: Q:如何表示二进制、十进制、八进制、十六进制的数字? A:二进制:似乎没有,需要用十六进制表示 八进制:以数字 0 开头 十六进制:以 0x 或者 0X 开头 Q:如何实现 字符串各种数字类型 的转换? A:通用的方法:sprintf 实现数字=字符串 sscanf 实现字符串=数字 其他方法:字符串=数字 atoi atof atol 分别实现字符串到 int、double、long 的转换 数字=字符串 _itoa _ltoa 分别实现 int、long 到字符串的转化, 其中 double=string 比较特殊,有_ecvt _fcvt _gcvt 如果使用 MFC 的 C
2、String 类,还可以使用.Format 方法。 Q:各种基本数据类型的范围和精度如何? A:Type Name Bytes Other Names Range of Values int * signed (int) System dependent char 1 signed char -128 to 127 long 4 (signed) long int -2,147,483,648 to 2,147,483,647 float 4 none 3.4E +/- 38 (7 digits) double 8 none 1.7E +/- 308 (15 digits) long doub
3、le 10 none 1.2E +/- 4932 (19 digits) /资料来源:MSDN Oct2001,但是实际测试有些并不符合 Q:有关模板 template A:模板的定义和实现必须都放在头文件里!如果你不幸把定义和实现分别写在了 MyTemplate.h 和 MyTemplate.cpp 里,那么请在#include “MyTemplate.h“后 加一句#include “MyTemplate.cpp“ Q:如何获取时间?精度如何? A:1 使用 time_t time( time_t * timer ) 精确到秒 2 使用 clock_t clock() 得到的是 CPU 时
4、间 精确到 1/CLOCKS_PER_SEC 秒 3 计算时间差使用 double difftime( time_t timer1, time_t timer0 ) 4 使用 DWORD GetTickCount() 精确到毫秒 5 如果使用 MFC 的 CTime 类,可以用 CTime:GetCurrentTime() 精确到秒 6 要获取高精度时间,可以使用 BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency) 获取系统的计数器的频率 BOOL QueryPerformanceCounter(LARGE_INTEGER *l
5、pPerformanceCount) 获取计数器的值 然后用两次计数器的差除以 Frequency 就得到时间。 7 还有 David 的文章中提到的方法: Multimedia Timer Functions The following functions are used with multimedia timers. timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime timeGetTime/timeKillEvent/TimeProc/timeSetEvent 精度很高 Q:有关指针和指针的引用 A:指针的引用是
6、合法的,引用的指针是非法的。 声明的时候要用 TYPE * 这种方式 Q3:如何得到随机的浮点数? Q3:没有太好的方法,可以试试 rand()/double(RAND_MAX)以得到 01 之间的随机数 Q:如何使用一些数学常量? Q1:PI A1:用 double 表示有 15 位,用 long double 表示有 19 位, pi = 3.141592653589793 或者 const long double pi = 2*acos(0); Q2:E A2:不会吧?exp()你都不会用吗? 还有,log()是以 e 为底的自然对数,log10 是以 10 为底的常用对数 Q:cout
7、 如何控制输出格式? A:1 数字进制:使用 hex、dec、oct 控制输出数字的进制 2 如何对齐:使用 setw 控制宽度 3 设置精度:使用 setprecision 控制输出精度 4 填充字符:使用 setfill 控制填充字符 5 控制格式:使用 setioflags(ios_base:fmtflags mask)来控制 常用的有 ios:fixed 固定的浮点显示 ios:scientific 指数表示 ios:left / ios:right 左/右对齐 ios:skipws 忽略前导空白 ios:uppercase / ios:lowercase 十六进制大/ 小写输出 别忘
8、了加上头文件:#include Q:如何创建二维数组? A:方法 1 TYPE * * arrayName; arrayName = new TYPE * SIZE_1; for ( i=0 ; i using namespace std; void main() vector a; a.resize(100); for (int i = 0; i using namespace std; complex就好了 Q:常见数据结构,如链表等等,有现成能用的吗? A:STL(Standard Template Library)里有很多东西, 如 heap、list、map、queue、set、stack、string 、vector Q:和 的二义性问题 A:举例说明:vector Group 就是错的 而:vector Group 就是对的 注意这里多了一个空格