以上这个失败的代码
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这个地址的元素的值
#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 su.
double sum = std::accumulate(std::begin(resultSet), std::end(resultSet), 0.0);
double mean = sum / resultSet.size(); //均值
double accum = 0.0;
int sum = accumulate(vec.begin() , vec.end() , 42);
accumulate带有三个形参:头两个形参指定要累加的元素范围,第三个形参则是累加的初值。
accumulate算法返回累加的结果,其返回类型就是其第三个实参的类型
用作求平均数的eg↓:
int a[]={1,2,3,4,5,6};...
Program:Comparison of class averages
this program is calculate two different group' averages
data of the two groups are in two different files and
the results input in a file.
从不同文件中读取两个班级的同学分数,计算平均分,再以文件的形式输出平均分并比较大小
double average(vector<double> arr) { // 定义计算平均值的函数
double sum = 0;
for (int i = 0; i < arr.size(); i++) {
sum += arr[i];
return sum / arr.size();
int main() {
vector<double> arr; // 声明一个 vector 动态数组
int n;
cout << "请输入数组长度 n:";
cin >> n;
for (int i = 0; i < n; i++) {
double num;
cout << "请输入第 " << i + 1 << " 个数:";
cin >> num;
arr.push_back(num); // 将输入的数添加到 vector 数组中
cout << "平均值为:" << average(arr) << endl; // 调用计算平均值的函数并输出结果
return 0;
首先,在程序开始处包含 `<vector>` 头文件,然后定义了一个名为 `average()` 的函数,该函数接受一个 vector 数组作为参数,并返回该数组的平均值。在主函数中,首先声明了一个名为 `arr` 的 vector 数组,然后通过用户输入的方式向该数组中添加元素。最后,调用 `average()` 函数计算平均值并将结果输出。