#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这个地址的元素的值
没毛病!