Skip to content

Instantly share code, notes, and snippets.

@easai
Last active August 29, 2015 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save easai/5fbbe361b9cdeb667c1c to your computer and use it in GitHub Desktop.
Save easai/5fbbe361b9cdeb667c1c to your computer and use it in GitHub Desktop.
#include <iostream>
using namespace std;
template <class T, size_t SizeA, size_t SizeB>
T he(T (&a)[SizeA], T (&b)[SizeB], T ab[])
{
if(SizeA!=SizeB)
return 0;
for(int i=0;i<SizeA;i++)
{
ab[i]=a[i]+b[i];
}
return 1;
}
template <class T, size_t SizeA, size_t SizeB>
T nenji(T (&a)[SizeA], T (&b)[SizeB])
{
if(SizeA!=SizeB)
return -1;
double ab=0;
for(int i=0;i<SizeA;i++)
{
ab+=a[i]*b[i];
}
return ab;
}
template <class T, size_t SizeA, size_t SizeB>
T ck(T (&a)[SizeA], T (&b)[SizeB], int k)
{
T ab=0;
for(int i=0;i<SizeA;i++)
{
for(int j=0;j<SizeB;j++)
{
if(i+j==k)
ab+=a[i]*b[j];
}
}
return ab;
}
template <class T, size_t SizeA, size_t SizeB>
int juanji(T (&a)[SizeA], T (&b)[SizeB], T ab[])
{
int n=SizeA+SizeB-1;
for(int i=0;i<n;i++)
{
ab[i]=ck(a,b,i);
}
return 1;
}
template <class T, size_t Size>
void dump(T (&a)[Size])
{
cout << "{";
for(int i=0;i<Size;i++)
{
cout << a[i];
if(i<Size-1)
cout << ", ";
}
cout << "}" << endl;
}
int main()
{
double a[]={1,2,4,3};
double b[]={4,2,8,0};
dump(a);
dump(b);
cout << "he = ";
double c[sizeof(a)/sizeof(a[0])];
he(a,b,c);
dump(c);
cout << "nenji = " << nenji(a,b) << endl;
cout << "juanji = ";
double ab[sizeof(a)/sizeof(a[0])+sizeof(b)/sizeof(b[0])-1];
juanji(a,b,ab);
dump(ab);
cout << endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment