Re: operator overloading ==
On 4 Mrz., 21:09, A <aragorn1...@gmail.com> wrote:
I am writing a "vector" class. I know about the STL but I prefer to
use this as I use this to create a "matrix" class later. I read that
using the inbuilt STL to create a matrix is not the best way to do it.
This is correct, but have you considered std::valarray?
(see below)
At the moment, the class "vec" looks like this.
template <class T>
class vec {
private:
int length;
T *v;
public:
vec();
explicit vec(int n);
vec(const T &a, int n);
vec(const T *a, int n);
vec(const vec &cpy);
vec & operator=(const vec &equate);
vec & operator=(const T &a);
inline T & operator[](const int i);
inline const T & operator[](const int i) const;
inline int size() const;
~vec();
};
Now, I want to overload the operator == in this way. It should accept
a value (type T) say "val", and check through all the entries of this
vector say "v1" and return another vector of type bool, which has
"false" where v1 != val and "true" where v1 == val. I managed to write
it this way...
member function:
vec<bool> operator==(const T &a) const;
the code definition is:
template <class T>
vec<bool> operator==(const T &a) const {
vec<bool> tmp(false,length);
for(int i=0; i<length; i++) {
if(v[i] == a) {
tmp[i] = true;
}
}
return tmp;
}
Remark: I suggest to use free function templates
instead of member functions. IMO user's would
find it rather astonishingly that they can write
vec<double> vc = ...;
bool test = vc == 1.2;
but not
bool test = 1.2 == vc;
Note also that std::valarray provides the functionality
you are describing here:
It provides the following free operator== overloads:
template<class T>
valarray<bool> operator==(const valarray<T>&, const valarray<T>&);
template<class T>
valarray<bool> operator==(const valarray<T>&, const T&);
template<class T>
valarray<bool> operator==(const T&, const valarray<T>&);
and all the other comparison functions.
This works great, but I would like to return the reference instead of
the whole vector and would like to know how to do it. I am unable to
make use of the "this" pointer as I am returning a "local vector". I
would appreciate any help with this. thank you!
No, you cannot do so: The local variable will
be destroyed, before it could be reasonably
used. You could keep an internal member of type
vec<bool> in vec<T>, but I do not recommend that.
Why do you want to do that?
[Before you mention performance issues: Have
you measured that this copy is the bottleneck
of the whole operation in your programs?]
Greetings from Bremen,
Daniel Kr?gler
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]