首页 > 代码库 > 初涉算法——C++
初涉算法——C++
一、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++
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。