初涉算法——C++
阿新 • • 發佈:2017-07-21
return 輸入數據 表示 包括 3.3 ring 聲明變量 加法 int()
一、sstream頭文件運用
題目:輸入數據的每行包括若幹個(至少一個)以空格隔開的整數,輸出每行中所有整數之和。
#include<iostream> #include<cstring> #include<sstream> using namespace std; int main() { string line; while(getline(cin,line)){ int sum=0, x; stringstream ss(line); //創建一個“字符串流”——ss while(ss>>x) sum+=x; //像讀取cin那樣讀取ss cout<<sum<<endl; } }
二、再談結構體struct
新的定義方式:
struct Point{ //code };
特點:在struct內可以有成員函數。
struct Point{ int x,y; Point(int x=0,int y=0):x(x),y(y) {} //默認參數,即Point()相當於Point(0,0)。 //函數Point無返回值,稱為構造函數,其是在聲明變量時調用的。 //“:x(x),y(y)”是一個簡單的寫法,表示把成員變量x初始化為參數x,成員變量y初始化為參數y。};
與C++結合:可以重載運算符,為結構體定義“加法”,為結構體定義流輸出方式。
struct Point{ int x,y; Point(int x=0,int y=0):x(x),y(y) {} //也可寫成Point(int x=0,int y=0){this->x=x;this->y=y;} }; Point operator + (const Point& A, const Point& B){ return Point(A.x+B.x,A.y+B.y); } ostream& operator<<(ostream &out, const Point& p){ out<<"("<<p.x<<","<<p.y<<")"; return out; }
應用舉例:
1 #include<iostream> 2 using namespace std; 3 struct Point{ 4 int x,y; 5 Point(int x=0,int y=0):x(x),y(y) {} 6 }; 7 Point operator + (const Point& A, const Point& B){ 8 return Point(A.x+B.x,A.y+B.y); 9 } 10 ostream& operator<<(ostream &out, const Point& p){ 11 out<<"("<<p.x<<","<<p.y<<")"; 12 return out; 13 } 14 int main() 15 { 16 Point a, b(1,2); 17 a.x = 3; 18 cout<< a+b <<endl; //輸出(4,2) 19 }
三、模板
沒有模板的求和:只能求一種數據類型數組的和。
1 int sum(int* begin, int* end) 2 { 3 int *p = begin; 4 int ans = 0; 5 for(int *p = begin; p != end; p++) 6 ans += *p; 7 return ans; 8 }
使用模板:下述函數可以給double數組和Point數組求和。
1 template<typename T> 2 T sum(T* begin, T* end) 3 { 4 T *p = begin; 5 T ans = 0; 6 for(T *p = begin; p != end; p++) 7 ans = ans + *p; //Point結構體中沒有定義"+="運算符。 8 return ans; 9 }
1 int main() 2 { 3 double a[] = {1.1, 2.2, 3.3, 4.4}; 4 cout<<sum(a,a+4)<<endl; 5 Point b[] = {Point(1,2), Point(3,4), Point(5,6), Point(7,8)}; //結構體數組 6 cout<<sum(b,b+4)<<endl; 7 }
帶模板的結構體:將上述的結構體Point編程模板。
1 template <typename T> 2 struct Point{ 3 T x,y; 4 Point(T x=0,T y=0):x(x),y(y) {} 5 }; 6 template <typename T> 7 Point<T> operator + (const Point<T>& A, const Point<T>& B){ 8 return Point<T>(A.x+B.x,A.y+B.y); 9 } 10 template <typename T> 11 ostream& operator << (ostream &out, const Point<T>& p){ 12 out<<"("<<p.x<<","<<p.y<<")"; 13 return out; 14 }
1 int main() 2 { 3 Point<int> a(1,2), b(3,4); 4 Point<double> c(1.1,2.2), d(3.3,4.4); 5 cout<<a+b<<" "<<c+d<<endl; //輸出(4,6) (4.4,6.6) 6 }
初涉算法——C++