473,503 Members | 1,979 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

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 1404
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 thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

6
1221
by: Protoman | last post by:
I'm trying to write an encryption program, and it doesn't produce the right output; "GOOGLE" encrypted w/"GOOGLE" IS NOT "ee". Here's the code: namespace { const char vTable= {...
12
5299
by: Rhino | last post by:
I am having an odd problem: the sqlj command on my system doesn't work. I am running DB2 (LUW) V8 (FP8) on WinXP. I haven't done an sqlj program since Version 6 of DB2 (LUW) so I checked the...
149
24963
by: Christopher Benson-Manica | last post by:
(Followups set to comp.std.c. Apologies if the crosspost is unwelcome.) strchr() is to strrchr() as strstr() is to strrstr(), but strrstr() isn't part of the standard. Why not? --...
10
1474
by: sandorf | last post by:
I'm using the Windows version of Python and IDLE. When I debug my .py file, my modification to the .py file does not seem to take effect unless I restart IDLE. Saving the file and re-importing it...
34
26594
by: electrician | last post by:
Perl has it, Basic has it, Fortran has it. What is so difficult about creating a goto command for JavaScript. Just set up a label and say go to it.
4
13590
by: Eric Lilja | last post by:
Is this an invalid program? Doesn't compile on my system: #include <cstdio> class Why { enum TArch {LITTLE_ENDIAN, BIG_ENDIAN, NON_IEEE}; TArch Architecture; }; int
13
27391
by: hn.ft.pris | last post by:
Hi: I have the following simple program: #include<iostream> using namespace std; int main(int argc, char* argv){ const double L = 1.234; const int T = static_cast<const int>(L); int arr;
3
1959
by: Budsy | last post by:
This is a peculiar problem for me. I am finding that the following query works perfectly and gives the expected result set when used in the Access query design environment, but it simply gives no...
1
1608
by: truedecembr | last post by:
Hi everyone, I am brand new to Java and not really even sure what I'm doing... I'm supposed to be writing a Timer class that is part of a stop watch application, and it seems to me that the program...
13
5339
by: chadsspameateremail | last post by:
I might have found a problem with how preg_match works though I'm not sure. Lets say you have a regular expression that you want to match a string of numbers. You might write the code like this:...
0
7205
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
7287
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
7348
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
5592
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
1
5021
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
4685
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
1519
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
1
744
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
0
397
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.