Antwort

12

In diesem Fall der einzige Wert, den Sie es einstellen kann, ist false mit:

bool* a = new bool[100000](); 

Das heißt, ich bin mir nicht sicher, warum Sie denken, würden Sie nicht eine Schleife verwenden können. Sie sind aus einem bestimmten Grund da. Sie sollten einfach die vorgefertigte Funktion fill oder fill_n (je nach Geschmack) verwenden.


Hinweis mit new "roh" wie das ist schrecklich Programmierpraxis. Verwenden Sie ein std::vector<bool> *:

std::vector<bool> v; 

v.resize(100000); 
std::fill(v.begin(), v.end(), true); // or false 

Oder:

std::vector<bool> v; 

v.reserve(100000); 
std::fill_n(std::back_inserter(v), 100000, true); // or false 

* Natürlich std::vector<bool> geschieht die richtige Container-Schnittstelle brechen so nicht wirklich bool ‚s speichern. Wenn das ein Problem ist, verwenden Sie stattdessen eine std::vector<char>.

+0

ich einen Vektor wurde mit, aber es war viel zu langsam. Also suche ich nach einer schnelleren Lösung. Aber ich habe nicht füllen verwenden, also denke ich, dass dies schneller sein kann. –

+0

@BSeven: Ich bezweifle ernsthaft, dass dein Anspruch wahr ist und dass du in einer Position bist, in der es sowieso wichtig wäre. Verwenden Sie einen 'std :: vector', der die Verwaltung für Sie übernimmt, damit Sie Lecks nicht leicht vermeiden können. Haben Sie Ihre vollständig fertig gestellte Release-Build-Anwendung profiliert und festgestellt, dass die vorgeschlagenen Ergebnisse mit einem "std :: vector" den langsamsten Teil Ihrer Anwendung darstellen? (Nr.) – GManNickG

+0

@BSeven: An welchem ​​Punkt war Vektor so langsam? Bei Release-Compiles sollte es bei korrekter Verwendung so schnell wie ein RAW-Array sein. – Philipp

14

Zusätzlich zu dem, was GMan oben gesagt, ich glaube, Sie einen Anfangswert für jeden Wert in Ihrem Vektor auf dem Bau wie folgt ..

vector<bool> a (100000, true); 
+1

+1 Duh meinerseits, sehr einfach. :) – GManNickG

2

Sie sollten den Vektor Ansatz bevorzugen angeben können, aber Sie können auch benutze memset.

1

Wenn 0 is false und 1 is true betrachtet - können Sie tun

bool* a = new bool[100]; 
std::fill_n(a, 100, 1); // all bool array elements set to true 
std::fill_n(a, 100, 0); // all bool array elements set to false 
Verwandte Themen