STL源碼 學習

一、STL<sstream>庫:使用string代替字符數組,避免緩衝區溢出;傳入參數和返回值類型可自動推導出來,避免類型轉換錯誤ios

istream、ostream、stringstream分別進行流的輸入、輸出和輸入輸出操做;stringstream構造和析構函數耗CPU時間,最好重複使用,clear()清除c++

string s = "100000";編程

int n = 0;數組

stream << s;函數

stream >> n;   // n等於100000.spa

template <class T>
void to_string(string &res, const T &t) {
  ostringstream oss;
  oss << t;
  res = oss.str();
}
sstream庫中getline()函數
istream& getline (char* s, streamsize n ); istream& getline (char* s, streamsize n, char delim );

Extracts characters from the stream as unformatted input and stores them into s as a c-string, until either the extracted character is the delimiting character, or n characters have been written to s (including the terminating null character). 抽取輸入,存儲爲const string,直到所抽取的字符被分隔,如‘\n’,或者已有n個字符被存儲(包括'\0')。code

 1 #include<iostream>
 2 #include<sstream>
 3 using namespace std;
 4 
 5 // main function
 6 int main() {
 7   stringstream ss_stream;
 8   int first, second;
 9   ss_stream << "456";
10   ss_stream >> first;
11   cout << first << endl;
12   // 注意clear()清除管道已有數據
13   ss_stream.clear();
14   ss_stream << true;
15   ss_stream >> second;
16   cout << second << endl;
17 
18   ss_stream.clear();
19   ss_stream << "字符串一" << endl;
20   ss_stream << "字符串二" << endl;
21   ss_stream << "字符串三" << endl;
22   ss_stream << "字符串四" << endl;
23 
24 //  char buffer[100]; // 聲明未初始化
25 //  while (ss_stream.getline(buffer, sizeof(buffer))) {
26 //    printf("msg=%s\n", buffer);
27 //  }
28 
29   string stemp;
30   while (getline(ss_stream, stemp)) {
31     cout << stemp << endl;
32   }
33   return 0;
34 }

 

二、C++類模板 template <class T>orm

模板是泛型編程的基礎,類是對象的抽象,模板是類的抽象,用模板能定義出具體類。屬於編譯時的多態,體如今參數的多態。對象

使用:template <class T> // 帶參數T的類模板blog

 1 #include<iostream>
 2 #include<cmath>
 3 using namespace std;
 4 
 5 // the declaration of class template
 6 template<class T>
 7 class Point {
 8  public:
 9   Point(T = 0, T = 0);  // 類的構造函數
10   Point(Point&);        // 類的拷貝構造函數
11   T Distance(Point&);   // 返回類型T的成員函數
12  private:
13   T x, y;
14 };
15 
16 // The implementation of class template Point
17 template <class T>
18 Point<T>::Point(T a, T b) : x(a), y(b){}
19 
20 template <class T>
21 Point<T>::Point(Point& a) {
22   x = a.x;
23   y = a.y;
24 }
25 
26 template <class T>
27 T Point<T>::Distance(Point &a) {
28   return sqrt((x - a.x)*(x - a.x) + (y - a.y) * (y - a.y));
29 }
30 
31 // main function
32 int main() {
33   Point<int> a1(3, 4), a2(5, 6);
34   cout << "The distance of these two points: "<< a1.Distance(a2) << endl;
35   
36   Point<double> b1(7.8, 9.8), b2(34.8, 25.4);
37   cout << "The distance of these two points: "<< b1.Distance(b2) << endl;
38   return 0;
39 }

 

三、cmath是c++語言中的庫函數,其中的c表示函數是來自c標準庫的函數,math爲數學經常使用庫函數。編譯時必須加上參數「-lm」。

相關文章
相關標籤/搜索