1. 程式人生 > >C++11中 一些指令及其意義

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());
}