• 算法竞赛入门经典 第四章 学习笔记 1


    算法竞赛入门经典 第四章 学习笔记 1

    数组作为参数和返回值

    因为把数组作 为参数传递给函数时,实际上只有数组的首地址作为指针传递给了函数。换句话说,在函数 定义中的int a[]等价于int *a。在只有地址信息的情况下,是无法知道数组里有多少个元素 的。正确的做法是加一个参数,即数组的元素个数
    以数组为参数调用函数时,实际上只有数组首地址传递给了函数,需要另 加一个参数表示元素个数。

    #include<iostream>
    using namespace std;
    int sum(int *a,int n)    //直接把参数a写成了int* a,暗示a实际上是一个地址 (函数名是一个地址)
    {
    	int res=0;
    	for(int i=0;i<n;i++)
    	{
    		res+=a[i];
    	}
    	return res;
    }
    int main()
    {
    	int a[]={1,2,3,4};
    	cout<<sum(a,4)<<endl;
    	return 0;
    }
    
    #include<iostream>
    using namespace std;
    int sum(int a[],int n)
    {
    	int res=0;
    	for(int i=0;i<n;i++)
    	{
    		res+=a[i];
    	}
    	return res;
    }
    int main()
    {
    	int a[]={1,2,3,4};
    	cout<<sum(a,4)<<endl;
    	return 0;
    }
    

    在函数调用时a 不一定非要传递一个数组

    #include<iostream>
    using namespace std;
    int sum(int a[],int n)
    {
    	int res=0;
    	for(int i=0;i<n;i++)
    	{
    		res+=a[i];
    	}
    	return res;
    }
    int main()
    {
    	int a[]={1,2,3,4};
    	cout<<sum(a+1,3)<<endl;
    	return 0;
    }
    /*
    除了把数组首地址本身作为实参外,还可以利用指针(因为函数名是一个指针,所以a+1)加减法把其他元素的首地址传递给函数。
    指针a+1指向a[1],即2这个元素(数组元素从0开始编号)。因此函数sum“看到”{2, 3, 4} 这个数组,因此返回9。一般地,若p是指针,k是正整数,则p+k就是指针p后面第k个元 素,p-k是p前面的第k个元素。
    */
    

    而如果p1和p2是类型相同的指针,则p2-p1是从p1到p2的元素个数(不含p2)

    #include<iostream>
    using namespace std;
    //先进行了一次指针减法,算出了从begin到end(不含end)的元素个数n,然 后再像前面那样把begin作为“数组名”进行累加。
    int sum(int *begin,int *end)
    {
    	int n=end-begin;
    	int res=0;
    	for(int i=0;i<n;i++)
    	{
    		res+=begin[i];
    	}
    	return res;
    }
    int main()
    {
    	int a[]={1,2,3,4};
    	cout<<sum(a,a+4)<<endl;
    	return 0;
    }
    
    #include<iostream>
    using namespace std;
    int sum(int *begin,int *end)
    {
    	int res=0;
    	for(int *p=begin;p!=end;p++)
    	{
    		res+=*p;
    	}
    	return res;
    }
    int main()
    {
    	int a[]={1,2,3,4};
    	cout<<sum(a,a+4)<<endl;
    	return 0;
    }
    //用一个新指针p作为循环变量,同时累加其指向的值
    /*
    声明了一个长度为10的数组a,则它的元素之和就是sum(a, a+10);若要计算a[i], a[i+1], …, a[j],则需要调用sum(a+i, a+j+1)。
    */
    


    把数组作为指针传递给函数时,数组内容是可以修改的。因此如果要写一个“返回数 组”的函数,可以加一个数组参数,然后在函数内修改这个数组的内容。不过在算法竞赛中经常采取其他做法

  • 相关阅读:
    二分题目
    求最小公倍数的最简模板
    用 vue 脚手架 vue-cli 初始化(新建)项目
    电脑没有声音
    node.js 安装步骤
    phpStrom编辑器 通过 git 提交代码到 gitlab
    jq 实现头像(气泡式浮动)
    微信网页授权 、获取用户昵称 头像等信息
    秒格式化 “秒” 为 天 时 分 秒
    改变swiper 按钮swiper-button-next 颜色
  • 原文地址:https://www.cnblogs.com/serendipity-my/p/12636056.html
Copyright © 2020-2023  润新知