Velocity Reviews > C++ > Set boolean array elements to false using STL algorithm?

# Set boolean array elements to false using STL algorithm?

Jason Heyes
Guest
Posts: n/a

 01-01-2006
What STL algorithm do I use to set all bool elements of an array to false in
just one line of code? Thanks!

Peter_Julian
Guest
Posts: n/a

 01-01-2006

"Jason Heyes" <(E-Mail Removed)> wrote in message
news:43b75dd1\$0\$18200\$(E-Mail Removed) u...
| What STL algorithm do I use to set all bool elements of an array to
false in
| just one line of code? Thanks!
|
|

What makes you believe that you need an algorithm to do that?

#include <iostream>
#include <ostream>
#include <vector>

int main()
{
const sz(10);
bool ba[sz] = {false};

std::cout << "bool array with size = " << sz << "\n";
for(int i = 0; i < sz; ++i)
{
std::cout << "ba[" << i << "] = " << ba[i];
std::cout << std::endl;
}

std::vector<bool> vb(10, false);

std::cout << "bool vector with size = " << sz << "\n";
for(int j = 0; j < sz; ++j)
{
std::cout << "ba[" << j << "] = " << ba[j];
std::cout << std::endl;
}

return 0;
}

/*
bool array with size = 10
ba[0] = 0
ba[1] = 0
ba[2] = 0
ba[3] = 0
ba[4] = 0
ba[5] = 0
ba[6] = 0
ba[7] = 0
ba[8] = 0
ba[9] = 0
bool vector with size = 10
ba[0] = 0
ba[1] = 0
ba[2] = 0
ba[3] = 0
ba[4] = 0
ba[5] = 0
ba[6] = 0
ba[7] = 0
ba[8] = 0
ba[9] = 0
*/

Jason Heyes
Guest
Posts: n/a

 01-01-2006
>
> What makes you believe that you need an algorithm to do that?
>

Here is why.

class Array {
bool arr[10];
public:
Array() { /* initialise arr */ }
};

What do I put in place of the comment if I want to initialise arr in just a
single line of code?

Greg
Guest
Posts: n/a

 01-01-2006
Jason Heyes wrote:
> >
> > What makes you believe that you need an algorithm to do that?
> >

>
> Here is why.
>
> class Array {
> bool arr[10];
> public:
> Array() { /* initialise arr */ }
> };
>
> What do I put in place of the comment if I want to initialise arr in just a
> single line of code?

#include <algorithm>

class Array
{
bool arr[10];
public:
Array()
{
std::fill_n( arr, sizeof(arr)/sizeof(arr[0]), 0);
}
};

Greg

Maxim Yegorushkin
Guest
Posts: n/a

 01-01-2006

Jason Heyes wrote:
> >
> > What makes you believe that you need an algorithm to do that?
> >

>
> Here is why.
>
> class Array {
> bool arr[10];
> public:
> Array() { /* initialise arr */ }
> };

You can default initialize member arrays using the following syntax:

Array() : arr() { ... }

Jason Heyes
Guest
Posts: n/a

 01-02-2006
>
> You can default initialize member arrays using the following syntax:
>
> Array() : arr() { ... }
>

I tried this in a small program and it did not initialise the array.

#include <iostream>
#include <algorithm>
#include <iterator>

class Array
{
int arr[10];
public:
Array() : arr()
{
std::copy(arr, arr + 10, std:stream_iterator<int>(std::cout,
"\n"));
}
};

int main()
{
Array array;
return 0;
}

The output of the program was this.

-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460
-858993460

Are you sure you can initialise member arrays in the way you have described?

Jason.

romain.gaucher@gmail.com
Guest
Posts: n/a

 01-02-2006
you cannot !
there is no std default contruction of integers, boolean etc.
"arr()" doesn't mean anything here and you have to do a loop

Clark S. Cox III
Guest
Posts: n/a

 01-03-2006
On 2006-01-02 08:47:31 -0500, "(E-Mail Removed)"
<(E-Mail Removed)> said:

> you cannot !
> there is no std default contruction of integers, boolean etc.
> "arr()" doesn't mean anything here and you have to do a loop

Are you claiming that the following program can print anything other
than the number zero?

#include <iostream>
using namespace std;

struct Foo
{
int i;
Foo() : i() { cout << i << endl; }
};

int main()
{
Foo foo;
}

--
Clark S. Cox, III
http://www.velocityreviews.com/forums/(E-Mail Removed)

Maxim Yegorushkin
Guest
Posts: n/a

 01-05-2006

Jason Heyes wrote:
> >
> > You can default initialize member arrays using the following syntax:
> >
> > Array() : arr() { ... }
> >

>
> I tried this in a small program and it did not initialise the array.

It does, refer to the standard §8.5/5.

You are probably using an utterly outdated compiler, such as VC6.
Upgrade to recent one.

Jason Heyes
Guest
Posts: n/a

 01-14-2006
>
>> you cannot !
>> there is no std default contruction of integers, boolean etc.
>> "arr()" doesn't mean anything here and you have to do a loop

>
> Are you claiming that the following program can print anything other than
> the number zero?
>
> #include <iostream>
> using namespace std;
>
> struct Foo
> {
> int i;
> Foo() : i() { cout << i << endl; }
> };
>
> int main()
> {
> Foo foo;
> }
>

There is no default initialisation of integers, boolean, etc, in arrays.