470,864 Members | 2,010 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,864 developers. It's quick & easy.

Why doesn't this program work as expected?

#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

template <typename T>
class LessThan
{
private:
T comp;
public:
LessThan(T val) : comp(val) {}
void setComp(const T& val) { comp = val; }
T getComp(void) { return comp; } const
bool operator()(const T& value) { return value < comp; }
};

int main()
{
double darr[10] = { 234.4, 11.1, 22.2, 500.0, 50.0, 11.1, 12.1,
600.6, 99.9, 0.0 }; vector<double> v2(darr, darr + 10);

double dal = 100.0;
LessThan<double> lt2(dal);

int count1 = count_if(v2.begin(), v2.begin(), lt2);
cout << "There are " << count1 << " values less than " << dal
<< endl;

return 0;
}

Expected output should have been "There are 7 values less than 100",
but it actually comes up with: "There are 0 values less than 100". Why?

I'm using GCC 3.4.4 on Linux

Thanks
--
http://www.munted.org.uk

"Honestly, what can I possibly say to get you into my bed?" - Anon.
Feb 23 '06 #1
6 1271
Ready to kick yourself?

Alex Buell wrote:
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

template <typename T>
class LessThan
{
private:
T comp;
public:
LessThan(T val) : comp(val) {}
void setComp(const T& val) { comp = val; }
T getComp(void) { return comp; } const
bool operator()(const T& value) { return value < comp; }
};

int main()
{
double darr[10] = { 234.4, 11.1, 22.2, 500.0, 50.0, 11.1, 12.1,
600.6, 99.9, 0.0 }; vector<double> v2(darr, darr + 10);

double dal = 100.0;
LessThan<double> lt2(dal);

int count1 = count_if(v2.begin(), v2.begin(), lt2);
Hmm, begin() to begin()... :)

-Mark
cout << "There are " << count1 << " values less than " << dal
<< endl;

return 0;
}

Expected output should have been "There are 7 values less than 100",
but it actually comes up with: "There are 0 values less than 100". Why?

I'm using GCC 3.4.4 on Linux

Thanks

Feb 23 '06 #2
On Thu, 23 Feb 2006 23:17:00 GMT Mark P
<us****@fall2005REMOVE.fastmailCAPS.fm> waved a wand and this message
magically appeared:
int count1 = count_if(v2.begin(), v2.begin(), lt2);


Hmm, begin() to begin()... :)


Doh! No wonder it didn't work as expected! lol, thanks.

--
http://www.munted.org.uk

"Honestly, what can I possibly say to get you into my bed?" - Anon.
Feb 23 '06 #3
* Alex Buell:
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

template <typename T>
class LessThan
Are you aware that the standard library provides std::less and
std::bind2nd, which together gives you this functionality?
{
private:
T comp;
public:
LessThan(T val) : comp(val) {}
void setComp(const T& val) { comp = val; }
T getComp(void) { return comp; } const
Note that that 'const' actually applies to the 'bool' on the line
below... 'getComp' should be declared as 'const'. Also, 'comp' would
IMO be a better name (I don't like 'computeSin' & friends...), and even
better, som other name than 'comp', e.g. just 'value'.
bool operator()(const T& value) { return value < comp; }
Should ideally be declared as 'const'.
};

int main()
{
double darr[10] = { 234.4, 11.1, 22.2, 500.0, 50.0, 11.1, 12.1,
600.6, 99.9, 0.0 }; vector<double> v2(darr, darr + 10);
The array 'darr' should ideally be declared 'const'.

Ditto for the vector 'v2', unless you plan on modifying the values.

double dal = 100.0;
LessThan<double> lt2(dal);

int count1 = count_if(v2.begin(), v2.begin(), lt2);
cout << "There are " << count1 << " values less than " << dal
<< endl;

return 0;
}

Expected output should have been "There are 7 values less than 100",
but it actually comes up with: "There are 0 values less than 100". Why?


Perhaps you meant to use begin() and end() instead of begin() and begin()?
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Feb 23 '06 #4
On Fri, 24 Feb 2006 00:22:25 +0100 "Alf P. Steinbach" <al***@start.no>
waved a wand and this message magically appeared:

int main()
{
double darr[10] = { 234.4, 11.1, 22.2, 500.0, 50.0, 11.1, 12.1,
600.6, 99.9, 0.0 }; vector<double> v2(darr, darr + 10);


The array 'darr' should ideally be declared 'const'.

Ditto for the vector 'v2', unless you plan on modifying the values.


Is there a good reason to declare them as const? Would it result in
better optimisations?

--
http://www.munted.org.uk

"Honestly, what can I possibly say to get you into my bed?" - Anon.
Feb 23 '06 #5
* Alex Buell:
On Fri, 24 Feb 2006 00:22:25 +0100 "Alf P. Steinbach" <al***@start.no>
waved a wand and this message magically appeared:
int main()
{
double darr[10] = { 234.4, 11.1, 22.2, 500.0, 50.0, 11.1, 12.1,
600.6, 99.9, 0.0 }; vector<double> v2(darr, darr + 10); The array 'darr' should ideally be declared 'const'.

Ditto for the vector 'v2', unless you plan on modifying the values.


Is there a good reason to declare them as const?


Yes.

Would it result in better optimisations?


Probably not.

The habit of declaring things 'const', whenever possible, results in a
much better chance of a correct program.

If the program doesn't need to be correct you can make it arbitrarily
fast... ;-)
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
Feb 23 '06 #6
On Fri, 24 Feb 2006 00:35:21 +0100 "Alf P. Steinbach" <al***@start.no>
waved a wand and this message magically appeared:
Is there a good reason to declare them as const?
Yes.
Would it result in better optimisations?


Probably not.

The habit of declaring things 'const', whenever possible, results in a
much better chance of a correct program.


In case someone else comes along and tries to modify the values, no
doubt, yes?
If the program doesn't need to be correct you can make it arbitrarily
fast... ;-)


lol, that's true.

--
http://www.munted.org.uk

"Honestly, what can I possibly say to get you into my bed?" - Anon.
Feb 24 '06 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

6 posts views Thread by Protoman | last post: by
12 posts views Thread by Rhino | last post: by
149 posts views Thread by Christopher Benson-Manica | last post: by
34 posts views Thread by electrician | last post: by
13 posts views Thread by chadsspameateremail | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.