前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C++中vector数组的求平均值函数average()定义问题

C++中vector数组的求平均值函数average()定义问题

作者头像
用户7886150
修改2021-02-05 10:03:35
修改2021-02-05 10:03:35
5.2K0
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: C++程序使用数组计算数字平均值

#include <iostream>

#include<vector>

#include<stdio.h>

using namespace std;

double average(double *arr){

    int len = (*arr).size;

    int sum = 0;

    int i;

    for ( i = 0;i < len; i++){

        sum += i;

    }

    return sum / len;

}

int main() {

    unsigned n;

    cout<<"n = ";

    cin>>n;

    vector<double> arr(n);

    cout<<"Please input"<<n<<"real numbers:"<<endl;

    for ( unsigned i = 0; i < n; i++)

        cin>>arr[i];

    cout<<"Average = "<< average(arr)<<endl;

    return 0;

以上这个失败的代码 

double中int len的报错:Member reference base type 'double' is not a structure or union 

main中coutAverage中对average()的报错:No matching function for call to 'average' 

main是抄的视频里的,average是视频里抄完但没有average定义然后去百度抄的但不是数组输入而是输入*x和len的,然后自己改的输入vector数组的 

但很显然没改对 

我现在根本就不了解vector怎么用 

下面这个是视频的代码 

我再去看看vecotr的用法,以及average是要自己写的话怎么写,还是要导入什么库... 

(1分钟后) 

原来视频离我暂停的地方后面马上就讲average函数了... 

average()函数这里确实只是接受了一个对象引用(arr),不知道这里面的元素个数 

但是在函数内for循环需要时可以调用arr的函数" .size() " 

这个" .size() "是vector对象的函数,返回函数个数来控制循环 

正确的定义average()及完整代码如下 

//计算数组arr中元素的平均值

double average(const vector<double> &arr)

{

    double sum = 0;

    for (unsigned i = 0; i < arr.size(); i++)

        sum += arr[i];

    return sum / arr.size();

}

int main() {

    unsigned n;

    cout<<"n = ";

    cin>>n;

    vector<double> arr(n);

    cout<<"Please input"<<n<<"real numbers:"<<endl;

    for ( unsigned i = 0; i < n; i++)

        cin>>arr[i];

    cout<<"Average = "<< average(arr)<<endl;

    return 0;

}

然后视频讲了个我没完全看懂的功能 

代码如下 

//基于范围的for循环配合auto举例

#include <vector>

#include <iostream>

int main()

{

    std::vector<int> v = {1,2,3};

    for (auto i = v.begin();i != v.end(); ++i)

        std::cout<<*i<<std::endl;

    for (auto e : v)//每次循环e都会从v中取出一个数组元素来进行处理,

        std::cout<<e<<std::endl;

}

这个 " e : v " 的用法我是第一次见,说是可以每次循环时候,e 都会从 v 中取出一个数组元素来进行处理 

所以第一个for里的*i的作用是什么呢?为什么指针感觉用的随随便便看不到用处? 

i = v.begin();i != v.end() 这个我看懂了,挺巧妙的,这个.begin()和.end()也都是vector数组的功能 

用auto确实很方便,因为不知道从vector数组中去取出来的可能是什么数 

我想出来了为什么要用i的指针了 

因为i是在for循环的第一个初始化中当场定义的 

i = v.begin()按我的观察,这个v.begin()返回的是一个地址 

是vector数组v第一个元素的地址 

然后后面v.end()是vector数组v最后一个元素的地址 

因为i都是vector数组v中元素的地址,故要输出数组元素的话,要用*i,取的是在i这个地址的元素的值 

没毛病!

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档