C++11中 一些指令及其意義
1、atoi() atof函式
標頭檔案:#include <stdlib.h>
1.1 atoi() 函式用來將字串轉換成整數(int),其原型為:
int atoi (const char * str);
【函式說明】atoi() 函式會掃描引數 str 字串,跳過前面的空白字元(例如空格,tab縮排等,可以通過 isspace() 函式來檢測),直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字串結束時('\0')才結束轉換,並將結果返回。
【返回值】返回轉換後的整型數;如果 str 不能轉換成 int 或者 str 為空字串,那麼將返回 0。
【舉例】
int min_inliers = atoi( pd.getData("min_inliers").c_str() );
double max_norm = atof( pd.getData("max_norm").c_str() );
1.2 atof函式
原型:double atof( const char *string );
ASCII to float
作用:將字串轉為double型別
2、智慧指標
STL一共給我們提供了四種智慧指標:auto_ptr、unique_ptr、shared_ptr和weak_ptr(本文章暫不討論)。其中模板auto_ptr是C++98提供的解決方案,C+11已將將其摒棄,有些庫依舊使用的是auto_ptr智慧指標,而你使用的是C++11的編譯器,那麼可能就會出現警告,這個時候,就需要將auto_ptr 變成 unique_ptr或者是shared_ptr
詳見:https://www.cnblogs.com/lanxuezaipiao/p/4132096.html
3、string中c_str() 、c_str()、data()、copy(p,n)函式的用法
標準庫的string類提供了3個成員函式來從一個string得到c型別的字元陣列:c_str()、data()、copy(p,n)。
3.1 c_str():生成一個const char*指標,指向以空字元終止的陣列。但是這個陣列是臨時的,其中的資料會被替換掉,如下例子所示:
const char* c; string s="1234"; c = s.c_str(); cout<<c<<endl; //輸出:1234 s="abcd"; cout<<c<<endl; //輸出:abcd
這種操作方式是不安全的,一旦改變了s中的數值,就會出錯,而且是無法估計 的,因此我們需要用strcpy函式吧資料複製出來,如下所示:
//const char* c; //①
//char* c; //②
//char c[20];
char* c=new char[20];
string s="1234";
//c = s.c_str();
strcpy(c,s.c_str());
cout<<c<<endl; //輸出:1234
s="abcd";
cout<<c<<endl; //輸出:1234
3.2 data():與c_str()類似,但是返回的陣列不以空字元終止。
詳見:http://www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html
4、stringstream的用法
輸入輸出的標頭檔案 <iostream>
string流的標頭檔案 <sstream>
檔案流的標頭檔案 <fstream>
4.1 使用輸入輸出流進行資料交換
stringstream ss_stream;
ss_stream << i; // 將i輸入流中
ss_stream >> str; // 將ss_stream中的數值輸出到str中
//注意:如果做多次資料轉換;必須呼叫clear()來設定轉換模式
ss_stream << "456";
ss_stream >> i; // 首先將字串轉換為int
ss_stream.clear();
ss_stream << true;
ss_stream >> i; // 然後將bool型轉換為int;假如之前沒有做clear,那麼i會出錯
//執行clear的結果
i = 456
i = 1
//沒有執行clear的結果
i = 456
i = 8800090900
4.2 支援char*的輸入和輸出
char sz_buf[20];
ss_stream << 8888;
ss_stream >> sz_buf; // 直接將數輸出到sz_buf字元陣列中
4.3 來儲存可變資料的列表
stringstream ss_stream;
ss_stream << "字串一" << endl;
ss_stream << "字串二" << endl;
ss_stream << "字串三" << endl;
ss_stream << "字串四" << endl;
ss_stream << "字串五" << endl;
char buffer[100];
while ( ss_stream.getline(buffer, sizeof(buffer))
{
printf("msg=%s\n", buffer);
}
ss_stream("");// 釋放字串流中的資源
// 或者用string來接收
stringstream ss_stream;
string stemp;
while ( getline(ss_stream, stemp) )
{
task_download(stemp.c_str(), relate.c_str());
}