/*
C++ Example for definition a Vector template class compiled by vc, g++.
*/
#include <iostream>
#include <cstdlib>
using namespace std;
template <typename T> class Vector;
template <class T>
ostream& operator << (ostream& os, Vector<T>& s);
template <typename T>
class Vector
{
public:
Vector (int len) : length(len), values(new T[len]) {}
~Vector (void)
{
delete []values;
}
T operator ()(int i) const;
T& operator()(int i);
int getlength();
Vector<T>& operator=(const Vector<T>& v);
friend ostream& operator <<<T>(ostream&, Vector&);
const Vector<T> operator+(Vector<T>&);
const Vector<T> operator*(Vector<T>&);
private:
T *values;
int length;
};
template <typename T>
ostream& operator <<(ostream& os, Vector<T>& s)
{
for (int i = 0; i < s.getlength(); ++i)
os << s(i) << " ";
return os;
}
template <typename T> inline
const Vector<T> Vector<T>::operator+(Vector<T>& s1)
{
int L = s1.getlength();
Vector<T> s(L);
for (int i = 0; i < L; ++i)
s(i) = values[i] + s1(i);
return s;
}
template <typename T> inline
const Vector<T> Vector<T>::operator*(Vector<T>& a)
{
int L = a.getlength();
Vector<T> tmp(L * L);
for (int i = 0; i < L ; i++)
for (int j = 0; j < L ; j++)
{
tmp(i * L + j) = values[i] * a(j);
}
return tmp;
}
template <typename T>
T Vector<T>::operator ()(int i) const
{
return values[i];
}
template <typename T>
T& Vector<T>::operator()(int i)
{
return values[i];
}
template <typename T>
int Vector<T>::getlength()
{
return length;
}
template<typename T>
Vector<T>& Vector<T>::operator=(const Vector<T>& v)
{
if (&v != this)
{
for (int i = 0; i < length ; i++)
values[i] = v(i);
}
return *this;
}
int main(int argc, char* argv[])
{
Vector<float> s(3), t(3), f(3), p(9);
for(int i = 0; i < 3; i++)
{
float x = i + 1;
s(i) = x;
t(i) = 2 * x;
}
cout << "s=" << s << endl;
cout << "t=" << t << endl;
f = s + t;
cout << "s+t=" << f << endl;
p = s * t;
cout << "s*t=" << p << endl;
system("pause");
return 0;
}
转载于:https://my.oschina.net/silverstone/blog/7794