第5题
#include <iostream>
using namespace std;
template <class T>
//当直接填入小数value常数这时候就是double
//a和value一时间内必须为同一种(一定是同一种类型的才可以)
//即使可以把精度提高也不可以
//比如a是double
//那么T就是double
//value如果一开始定义了一个float类型的value的变量
//那么即使T是double,精度比float高
//也会报错
void iota(T* a,T value,int size)
{
for (int i = 0; i < size; i++)
{
a[i] = value+i;
}
}
//接下来就重载a和value不同类型的函数了
void iota(float* a,double value,int size)
{
for (int i = 0; i < size; i++)
{
a[i] = value+i;
}
}
int main()
{
double arr[7] = {0};
double value = 2.4;
int size = sizeof(arr)/sizeof(arr[0]);
iota(arr,value,7);
for (int i = 0; i < 7; i++)
{
cout<<arr[i]<<endl;
}
return 0;
}
第6题
#include <iostream>
using namespace std;
template <class T>
bool is_sorted(T* arr,int size)
{
if(size<=2)
{
return false;
}
for (int i = 0; i < size-1; i++)
{
//先比较前两个
if(arr[i]<arr[1+i])
{
//减一防止越界
//既然大小都变换了,那么就可以开始判断了
//前两个已经判断完关系了
//可以比较下表为1和2的元素
for(int j = 1;j<size-1;j++)
{
if(arr[j]>arr[j+1])
{
return false;
}
}
//都比较完了,那就说明满足小于等于的关系
//下面同理
return true;
}
else if(arr[i]>arr[1+i])
{
//减一防止越界
//既然大小都变换了,那么就可以开始判断了
//前两个已经判断完关系了
//可以比较下表为1和2的元素
for(int j = 1;j<size-1;j++)
{
if(arr[j]<arr[j+1])
{
return false;
}
}
return true;
}
else if(arr[i]==arr[i+1])
{
//如果一直等于就循环,
//一直到结果出来,或是判断出来全部都等于
//如果是全部都等于,那么标记就不用改
//还是0
continue;
}
}
return true;
}
int main()
{
int arr[] = {1,5,6,7,8,7,9,10,22};
int size = sizeof(arr)/sizeof(arr[0]);
//非0即真,真即1,假即0
cout<<is_sorted(arr,size)<<endl;
return 0;
}
第7题
#include <iostream>
using namespace std;
template <class T>
int mismatch(T* arr1,T* arr2,int size)
{
for (int i = 0; i < size; i++)
{
if(arr1[i]!=arr2[i])
{
return i;
}
}
//没有下标表示-1
//别人看到-1肯定会疑惑
//就会来看这个函数是怎么写的
//这时候我备注一下返回值是-1的意思
//返回值-1表示这两个数组大小相同
return -1;
}
int main()
{
int arr1[] = {1,2,5,6,4,7};
int arr2[] = {1,2,5,6,3,7};
int size1 = sizeof(arr1)/sizeof(arr1[0]);
int size2 = sizeof(arr1)/sizeof(arr1[0]);
if(size1>=size2)
{
cout<<mismatch(arr1,arr2,size2)<<endl;
}
else if(size1<size2)
{
cout<<mismatch(arr1,arr2,size1)<<endl;
}
return 0;
}