zoukankan      html  css  js  c++  java
  • 初涉算法——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 }
  • 相关阅读:
    L2R 三:常用工具包介绍之 XGBoost与LightGBM
    连续特征自动离散化
    优化算法
    L2R 一:基础知识介绍
    深度学习--pytorch安装
    vim实用操作指南
    小贴士--Python
    setInterval和clearInterval应用小实例
    表单应用举例
    容器
  • 原文地址:https://www.cnblogs.com/xzxl/p/7219482.html
Copyright © 2011-2022 走看看