Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Why doesn't this program work as expected?

Reply
Thread Tools

Why doesn't this program work as expected?

 
 
Alex Buell
Guest
Posts: n/a
 
      02-23-2006
#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.
 
Reply With Quote
 
 
 
 
Mark P
Guest
Posts: n/a
 
      02-23-2006
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

 
Reply With Quote
 
 
 
 
Alex Buell
Guest
Posts: n/a
 
      02-23-2006
On Thu, 23 Feb 2006 23:17:00 GMT Mark P
<(E-Mail Removed)> 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.
 
Reply With Quote
 
Alf P. Steinbach
Guest
Posts: n/a
 
      02-23-2006
* 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?
 
Reply With Quote
 
Alex Buell
Guest
Posts: n/a
 
      02-23-2006
On Fri, 24 Feb 2006 00:22:25 +0100 "Alf P. Steinbach" <(E-Mail Removed)>
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.
 
Reply With Quote
 
Alf P. Steinbach
Guest
Posts: n/a
 
      02-23-2006
* Alex Buell:
> On Fri, 24 Feb 2006 00:22:25 +0100 "Alf P. Steinbach" <(E-Mail Removed)>
> 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?
 
Reply With Quote
 
Alex Buell
Guest
Posts: n/a
 
      02-23-2006
On Fri, 24 Feb 2006 00:35:21 +0100 "Alf P. Steinbach" <(E-Mail Removed)>
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.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
RE;Kontki if you delete kontiki any program you loaded with it in it 'will not work I have tried it with three programs and none work anymore (if you se it just stop download) 1-Twitch Computer Support 5 04-23-2009 02:45 PM
why why why why why Mr. SweatyFinger ASP .Net 4 12-21-2006 01:15 PM
findcontrol("PlaceHolderPrice") why why why why why why why why why why why Mr. SweatyFinger ASP .Net 2 12-02-2006 03:46 PM
why why why does function not work Horace Nunley ASP .Net 1 09-27-2006 09:52 PM
why is my iostream program so much slower than equivalent cstdio program? Mark C++ 20 12-27-2004 10:58 PM



Advertisments