Set boolean array elements to false using STL algorithm?

J

Jason Heyes

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

Peter_Julian

| 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;
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
*/
 
J

Jason Heyes

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?
 
G

Greg

Jason said:
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
 
M

Maxim Yegorushkin

Jason said:
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() { ... }
 
J

Jason Heyes

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::eek: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.
 
R

romain.gaucher

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
 
C

Clark S. Cox III

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;
}
 
M

Maxim Yegorushkin

Jason said:
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.
 
J

Jason Heyes

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.
 
R

red floyd

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

The above code should print 0. If you look he uses the default
constructor for i.

int x = int();

*Will* initialize x to 0. Unfortunately, I don't have a copy of the
Standard in front of me, so I can't quote chapter and verse.
 
M

Maxim Yegorushkin

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

You are mistaken. Refer to §8.5.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,901
Latest member
Noble71S45

Latest Threads

Top