Odpowiedz

12

W takim przypadku jedyną wartością można go ustawić na to false z:

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

powiedział, że nie jestem pewien, dlaczego uważasz, że nie można korzystać z pętli. Są tam z jakiegoś powodu. Powinieneś po prostu użyć gotowej funkcji fill lub fill_n (w zależności od gustu).


Uwaga użyciu new „surowe”, jak to jest straszna praktyka programowania. Użyj std::vector<bool> *:

std::vector<bool> v; 

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

Lub:

std::vector<bool> v; 

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

* Oczywiście, std::vector<bool> stanie złamać właściwego interfejsu pojemnika tak faktycznie nie przechowywać bool „s. Jeśli jest to problem, użyj zamiast tego std::vector<char>.

+0

używałem wektor, ale to było zbyt powolne. Dlatego szukam szybszego rozwiązania. Ale nie użyłem wypełnienia, więc myślę, że to może być szybciej. –

+0

@BSeven: Poważnie wątpię, że twoje roszczenie jest prawdziwe i że jesteś w sytuacji, w której i tak by to miało znaczenie. Użyj 'std :: vector', zarządza on za Ciebie, aby uniknąć problemów z wyciekami. Czy profilowałeś w pełni ukończoną aplikację do generowania wersji i stwierdziłeś, że sugerowane wyniki przy użyciu 'std :: vector' były najwolniejszą częścią twojej aplikacji? (No.) – GManNickG

+0

@Seven: w którym momencie wektor był tak wolny? W kompilacjach z wydaniem powinna być tak szybka, jak surowa tablica, jeśli jest używana poprawnie. – Philipp

14

Oprócz tego, co powiedział, G-Man powyżej, uważam, że można określić wartość początkową dla każdej wartości w swoim wektora na budowę tak ..

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

+1 Duh z mojej strony, bardzo proste. :) – GManNickG

2

Należy preferować podejście wektor, ale można również użyj memset.

1

Jeśli 0 is false i 1 is true rozważyć - można zrobić

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 
Powiązane problemy