• 0

Initialize Array of Boolean Values


Question

primitive bool variables have "false" by default.

Is there a better way of initializing an array of boolean value to "true"?

Normally this is the way :

for(int i = 0; i < n; i++) array = true;

Is there a way say, during declaration

bool array[10000] = {false};

and have all 10000 initialized to false without using the for loop?

Link to comment
https://www.neowin.net/forum/topic/278351-initialize-array-of-boolean-values/
Share on other sites

12 answers to this question

Recommended Posts

  • 0

Although you can't initialize them all to true, you can treat them all as true. Just do everything opposite in boolean statements, if that couple of seconds of runtime is that important to you. Btw, what in the world would you need a size 10000 boolean array for anyway?

  • 0
  Andareed said:
bool array[10000];

memset(&array, 0, 10000 * sizeof(bool));

585385868[/snapback]

Actually that should be memset(&array,1,10000*sizeof(bool)) if he wants true. Interesting way of doing it though, I didn't think of doing it that way, although it might not be anymore efficient than a loop anyways.

  • 0
  Citrusmoose said:
Although you can't initialize them all to true, you can treat them all as true.  Just do everything opposite in boolean statements, if that couple of seconds of runtime is that important to you.  Btw, what in the world would you need a size 10000 boolean array for anyway?

585385419[/snapback]

its theoretical i was just wondering. :)

i prefer to not do opposites for readability's sake.

  • 0
  Quote
Doesn't bool array[10000] = {true}; work too?

Doesn't work because it sets the first element to true and the rest gets initialized to 0, thus false.

You could try a

bool array[10000];
std::memset(array,static_cast&lt;unsigned int&gt;(-1), sizeof(array));

Or consider using a std::vector<bool> or std::bitset.

  • 0
  juan said:
if i understand correctly, the only way of initializing arrays on the stack is to use a loop. memset for heap.

585388902[/snapback]

No. memset doesn't care how you allocate memory. You can call memset on any value that has a memory address (e.g. ints, bools, bool arrays, int arrays, class objects, array of class objects, etc). That's also why memset is dangerous.

  Quote
Or consider using a std::vector<bool> or std::bitset.

++

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Crowdstrike the same service provider that caused millions of in damages? I hate disliking a company for a singular failure but they really screwed up.
    • I see you subscribe to the Linux/macOS approach to winning over converts...
    • As we get closer to October 2025 and the end of Windows 10 support, Windows 11 will pick up its pace and soon become the most popular desktop operating system worldwide. That's an assertion. It's also quite possible that the only growth will come from attrition as people and companies buy new machines that only come with Win11. It's also possible that we'll get a literal repeat of Win XP and Win 7, where a large number of users just waited until Microsoft gave in and fixed the core problems that the consumers were complaining about in Win Vista and Win 8 when they released Win 7 and Win 10.
    • It's significant growth for Linux considering the market share, so it could have had that effect I described.
    • Microsoft and Crowdstrike announce partnership on threat actor naming by Pradeep Viswanathan Whenever a cyberattack is discovered, companies disclose it to the public and assign it a unique name based on their internal procedures. Unfortunately, this leads to inconsistencies, as each company has its own naming conventions. As a result, the same threat actor behind a cyberattack may end up with multiple names, causing delays and confusion in response efforts. For example, a threat actor that Microsoft refers to as Midnight Blizzard might be known as Cozy Bear, APT29, or UNC2452 by other security vendors. To address this issue, Microsoft and CrowdStrike are teaming up. These companies will align their individual threat actor taxonomies to help security professionals respond to cyberattacks with greater clarity and confidence. It’s important to note that Microsoft and CrowdStrike are not attempting to create a single naming standard. Instead, they are releasing a mapping that lists common threat actors tracked by both companies, matched according to their respective taxonomies. The mapping also includes corresponding aliases from each group’s naming system. You can view the joint threat actor mapping by Microsoft and CrowdStrike here. Although this threat actor taxonomy mapping is a joint effort between Microsoft and CrowdStrike, Google/Mandiant and Palo Alto Networks' Unit 42 are expected to contribute to this initiative in the future. Vasu Jakkal, Corporate Vice President of Microsoft Security, wrote the following about this collaboration with CrowdStrike: As more organizations join this initiative, the collective defense against cyber threats will undoubtedly be improved.
  • Recent Achievements

    • One Year In
      WaynesWorld earned a badge
      One Year In
    • First Post
      chriskinney317 earned a badge
      First Post
    • Week One Done
      Nullun earned a badge
      Week One Done
    • First Post
      sultangris earned a badge
      First Post
    • Reacting Well
      sultangris earned a badge
      Reacting Well
  • Popular Contributors

    1. 1
      +primortal
      173
    2. 2
      ATLien_0
      125
    3. 3
      snowy owl
      122
    4. 4
      Xenon
      116
    5. 5
      +Edouard
      93
  • Tell a friend

    Love Neowin? Tell a friend!