C++精华基础贴[水木清华]
生活随笔
收集整理的這篇文章主要介紹了
C++精华基础贴[水木清华]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
導讀:
發信人: CDRAGON (CDRAGON), 信區: CPlusPlus
標 題: 基礎知識
發信站: BBS 水木清華站 (Mon Nov 20 13:03:14 2006), 站內
八進制:以數字0開頭
十六進制:以0x或者0X開頭
Q:如何實現 字符串<=>各種數字類型 的轉換?
A:通用的方法:sprintf 實現數字=>字符串
sscanf 實現字符串=>數字
其他方法:字符串=>數字 atoi atof atol分別實現字符串到int、double、long的轉換
數字=>字符串 _itoa _ltoa分別實現int、long到字符串的轉化,
其中double=>string比較特殊,有_ecvt _fcvt _gcvt
如果使用MFC的CString類,還可以使用.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 double 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時間 精確到1/CLOCKS_PER_SEC秒
3 計算時間差使用double difftime( time_t timer1, time_t timer0 )
4 使用DWORD GetTickCount() 精確到毫秒
5 如果使用MFC的CTime類,可以用CTime::rmat方法。
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 double 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時間 精確到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 *lpPerformanceCount)
獲取計數器的值
然后用兩次計數器的差除以Frequency就得到時間。
7 還有David的文章中提到的方法:
Multimedia Timer Functions
The following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
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時間 精確到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 *lpPerformanceCount)
獲取計數器的值
然后用兩次計數器的差除以Frequency就得到時間。
7 還有David的文章中提到的方法:
Multimedia Timer Functions
The following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
timeGetTime/timeKillEvent/TimeProc/timeSetEvent 精度很高
Q:有關指針和指針的引用
A:指針的引用是合法的,引用的指針是非法的。
聲明的時候要用 TYPE * &variable,不能用TYPE &* variable
Q:有關隨機數的問題
Q1:如何得到給定范圍的隨機數?
A1:如要得到[a,b)區間的隨機數,那么使用 ( rand()%(b-a) ) + a 就可以
Q2:我用rand()得到的隨機數序列怎么每次都是一樣的?
A2:rand()產生的是偽隨機數,所以如果想每次產生不同的序列,需要給定隨機數生
成的種子,使用函數void srand(unsigned int seed),一般都使用
srand((unsign時間,可以使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)
獲取系統的計數器的頻率
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)
獲取計數器的值
然后用兩次計數器的差除以Frequency就得到時間。
7 還有David的文章中提到的方法:
Multimedia Timer Functions
The following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
timeGetTime/timeKillEvent/TimeProc/timeSetEvent 精度很高
Q:有關指針和指針的引用
A:指針的引用是合法的,引用的指針是非法的。
聲明的時候要用 TYPE * &variable,不能用TYPE &* variable
Q:有關隨機數的問題
Q1:如何得到給定范圍的隨機數?
A1:如要得到[a,b)區間的隨機數,那么使用 ( rand()%(b-a) ) + a 就可以
Q2:我用rand()得到的隨機數序列怎么每次都是一樣的?
A2:rand()產生的是偽隨機數,所以如果想每次產生不同的序列,需要給定隨機數生
成的種子,使用函數void srand(unsigned int seed),一般都使用
srand((unsigned)time(NULL));這種方式
Q3:如何得到隨機的浮點數?
Q3:沒有太好的方法,可以試試rand()/double(RAND_MAX)以得到0~1之間的隨機數
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如何控制輸出格式?
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忽略前導空白
signed)time(NULL));這種方式
Q3:如何得到隨機的浮點數?
Q3:沒有太好的方法,可以試試rand()/double(RAND_MAX)以得到0~1之間的隨機數
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如何控制輸出格式?
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 十六進制大/小寫輸出
別忘了加上頭文件:#include
Q:如何創建二維數組?
A:方法1
TYPE * * arrayName;
arrayName = new TYPE * [SIZE_1];
for ( i=0 ;i
{
arrayName[i] = new TYPE[SIZE_2];
}
使用完畢后不要忘記釋放內存:
for ( i=0 ;i{
if ( arrayName[i]!=NULL ) delete [] arrayName[i];
}
if ( arrayName!=NULL ) delete [] arrayName;
備注:在使用這種方法創建的數組時,如果需要把數組傳遞給函數的時候,
可以傳遞TYPE **的指針,但是如果使用TYPE arrayName[][]創建數組
無論幾維數組都是TYPE * 的指針,如果試圖傳遞TYPE **的指針,會報告錯誤
方法2(推薦)
參見kirbyzhou《關于動態數組》一文
Q:如何使用復數類?
A:#include
using name維數組?
A:方法1
TYPE * * arrayName;
arrayName = new TYPE * [SIZE_1];
for ( i=0 ;i
{
arrayName[i] = new TYPE[SIZE_2];
}
使用完畢后不要忘記釋放內存:
for ( i=0 ;i{
if ( arrayName[i]!=NULL ) delete [] arrayName[i];
}
if ( arrayName!=NULL ) delete [] arrayName;
備注:在使用這種方法創建的數組時,如果需要把數組傳遞給函數的時候,
可以傳遞TYPE **的指針,但是如果使用TYPE arrayName[][]創建數組
無論幾維數組都是TYPE * 的指針,如果試圖傳遞TYPE **的指針,會報告錯誤
方法2(推薦)
參見kirbyzhou《關于動態數組》一文
Q:如何使用復數類?
A:#include
using namespace std;
complex就好了
Q:常見數據結構,如鏈表等等,有現成能用的嗎?
A:STL(Standard Template Library)里有很多東西,
如heap、list、map、queue、set、stack、string、vector……
Q:>>和> >的二義性問題
A:舉例說明:vectorGroup就是錯的
而:vectorGroup就是對的
無論幾維數組都是TYPE * 的指針,如果試圖傳遞TYPE **的指針,會報告錯誤
方法2(推薦)
參見kirbyzhou《關于動態數組》一文
Q:如何使用復數類?
A:#include
using namespace std;
complex就好了
Q:常見數據結構,如鏈表等等,有現成能用的嗎?
A:STL(Standard Template Library)里有很多東西,
如heap、list、map、queue、set、stack、string、vector……
using namespace std;
complex就好了
Q:常見數據結構,如鏈表等等,有現成能用的嗎?
A:STL(Standard Template Library)里有很多東西,
如heap、list、map、queue、set、stack、string、vector……
Q:>>和> >的二義性問題
A:舉例說明:vectorGroup就是錯的
而:vectorGroup就是對的
--
※ 修改:CDRAGON 于 Nov 21 18:17:21 修改本文[FROM: 59.66.132.*]
※ 來源:BBS 水木清華站 smth.edu.cn[FROM: 59.66.132.*]
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1507419
本文轉自
http://blog.csdn.net/seraphsky/archive/2007/02/11/1507419.aspx
發信人: CDRAGON (CDRAGON), 信區: CPlusPlus
標 題: 基礎知識
發信站: BBS 水木清華站 (Mon Nov 20 13:03:14 2006), 站內
八進制:以數字0開頭
十六進制:以0x或者0X開頭
Q:如何實現 字符串<=>各種數字類型 的轉換?
A:通用的方法:sprintf 實現數字=>字符串
sscanf 實現字符串=>數字
其他方法:字符串=>數字 atoi atof atol分別實現字符串到int、double、long的轉換
數字=>字符串 _itoa _ltoa分別實現int、long到字符串的轉化,
其中double=>string比較特殊,有_ecvt _fcvt _gcvt
如果使用MFC的CString類,還可以使用.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 double 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時間 精確到1/CLOCKS_PER_SEC秒
3 計算時間差使用double difftime( time_t timer1, time_t timer0 )
4 使用DWORD GetTickCount() 精確到毫秒
5 如果使用MFC的CTime類,可以用CTime::rmat方法。
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 double 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時間 精確到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 *lpPerformanceCount)
獲取計數器的值
然后用兩次計數器的差除以Frequency就得到時間。
7 還有David的文章中提到的方法:
Multimedia Timer Functions
The following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
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時間 精確到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 *lpPerformanceCount)
獲取計數器的值
然后用兩次計數器的差除以Frequency就得到時間。
7 還有David的文章中提到的方法:
Multimedia Timer Functions
The following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
timeGetTime/timeKillEvent/TimeProc/timeSetEvent 精度很高
Q:有關指針和指針的引用
A:指針的引用是合法的,引用的指針是非法的。
聲明的時候要用 TYPE * &variable,不能用TYPE &* variable
Q:有關隨機數的問題
Q1:如何得到給定范圍的隨機數?
A1:如要得到[a,b)區間的隨機數,那么使用 ( rand()%(b-a) ) + a 就可以
Q2:我用rand()得到的隨機數序列怎么每次都是一樣的?
A2:rand()產生的是偽隨機數,所以如果想每次產生不同的序列,需要給定隨機數生
成的種子,使用函數void srand(unsigned int seed),一般都使用
srand((unsign時間,可以使用
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)
獲取系統的計數器的頻率
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)
獲取計數器的值
然后用兩次計數器的差除以Frequency就得到時間。
7 還有David的文章中提到的方法:
Multimedia Timer Functions
The following functions are used with multimedia timers.
timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime
timeGetTime/timeKillEvent/TimeProc/timeSetEvent 精度很高
Q:有關指針和指針的引用
A:指針的引用是合法的,引用的指針是非法的。
聲明的時候要用 TYPE * &variable,不能用TYPE &* variable
Q:有關隨機數的問題
Q1:如何得到給定范圍的隨機數?
A1:如要得到[a,b)區間的隨機數,那么使用 ( rand()%(b-a) ) + a 就可以
Q2:我用rand()得到的隨機數序列怎么每次都是一樣的?
A2:rand()產生的是偽隨機數,所以如果想每次產生不同的序列,需要給定隨機數生
成的種子,使用函數void srand(unsigned int seed),一般都使用
srand((unsigned)time(NULL));這種方式
Q3:如何得到隨機的浮點數?
Q3:沒有太好的方法,可以試試rand()/double(RAND_MAX)以得到0~1之間的隨機數
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如何控制輸出格式?
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忽略前導空白
signed)time(NULL));這種方式
Q3:如何得到隨機的浮點數?
Q3:沒有太好的方法,可以試試rand()/double(RAND_MAX)以得到0~1之間的隨機數
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如何控制輸出格式?
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 十六進制大/小寫輸出
別忘了加上頭文件:#include
Q:如何創建二維數組?
A:方法1
TYPE * * arrayName;
arrayName = new TYPE * [SIZE_1];
for ( i=0 ;i
{
arrayName[i] = new TYPE[SIZE_2];
}
使用完畢后不要忘記釋放內存:
for ( i=0 ;i{
if ( arrayName[i]!=NULL ) delete [] arrayName[i];
}
if ( arrayName!=NULL ) delete [] arrayName;
備注:在使用這種方法創建的數組時,如果需要把數組傳遞給函數的時候,
可以傳遞TYPE **的指針,但是如果使用TYPE arrayName[][]創建數組
無論幾維數組都是TYPE * 的指針,如果試圖傳遞TYPE **的指針,會報告錯誤
方法2(推薦)
參見kirbyzhou《關于動態數組》一文
Q:如何使用復數類?
A:#include
using name維數組?
A:方法1
TYPE * * arrayName;
arrayName = new TYPE * [SIZE_1];
for ( i=0 ;i
{
arrayName[i] = new TYPE[SIZE_2];
}
使用完畢后不要忘記釋放內存:
for ( i=0 ;i{
if ( arrayName[i]!=NULL ) delete [] arrayName[i];
}
if ( arrayName!=NULL ) delete [] arrayName;
備注:在使用這種方法創建的數組時,如果需要把數組傳遞給函數的時候,
可以傳遞TYPE **的指針,但是如果使用TYPE arrayName[][]創建數組
無論幾維數組都是TYPE * 的指針,如果試圖傳遞TYPE **的指針,會報告錯誤
方法2(推薦)
參見kirbyzhou《關于動態數組》一文
Q:如何使用復數類?
A:#include
using namespace std;
complex就好了
Q:常見數據結構,如鏈表等等,有現成能用的嗎?
A:STL(Standard Template Library)里有很多東西,
如heap、list、map、queue、set、stack、string、vector……
Q:>>和> >的二義性問題
A:舉例說明:vectorGroup就是錯的
而:vectorGroup就是對的
無論幾維數組都是TYPE * 的指針,如果試圖傳遞TYPE **的指針,會報告錯誤
方法2(推薦)
參見kirbyzhou《關于動態數組》一文
Q:如何使用復數類?
A:#include
using namespace std;
complex就好了
Q:常見數據結構,如鏈表等等,有現成能用的嗎?
A:STL(Standard Template Library)里有很多東西,
如heap、list、map、queue、set、stack、string、vector……
using namespace std;
complex就好了
Q:常見數據結構,如鏈表等等,有現成能用的嗎?
A:STL(Standard Template Library)里有很多東西,
如heap、list、map、queue、set、stack、string、vector……
Q:>>和> >的二義性問題
A:舉例說明:vectorGroup就是錯的
而:vectorGroup就是對的
--
※ 修改:CDRAGON 于 Nov 21 18:17:21 修改本文[FROM: 59.66.132.*]
※ 來源:BBS 水木清華站 smth.edu.cn[FROM: 59.66.132.*]
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1507419
本文轉自
http://blog.csdn.net/seraphsky/archive/2007/02/11/1507419.aspx
總結
以上是生活随笔為你收集整理的C++精华基础贴[水木清华]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬件三人行,运放基础第2讲听课笔记,电路
- 下一篇: 空间电子系统设计1:空间环境