2009-07-16 9 views

Odpowiedz

41

std::fill lub std::fill_n w nagłówku algorithm powinien zrobić lewy.

// set m elements, starting from myvec.begin() + n to true 
std::fill_n(myvec.begin() + n, m, true); 

// set all elements between myvec.begin() + n and myvec.begin() + n + m to true 
std::fill(myvec.begin() + n, myvec.begin() + n + m, true); 
3

Nie według mojej najlepszej wiedzy. Możesz spróbować użyć jednego z algorytmów, takich jak std :: for_each, std :: replace lub std :: fill, aby ukryć fakt, że przechodzisz przez zakres elementów, ale będziesz w pętli.

Biorąc pod uwagę, że powiedziałeś, że używasz wektora booleans - jeśli używasz specjalizacji std :: vector, możesz przeczytać sekcję "what about bool" in this article by Herb Sutter.

+0

Zdaję sobie sprawę, że pod maską zawsze znajduje się pętla. Szukałem syntaktycznie eleganckiego sposobu, żeby to ukryć. – Dima

+0

Dzięki za ostrzeżenie o wektorze , przy okazji. – Dima

5

Wektor bool. Wysyła dreszcze wzdłuż mojego kręgosłupa.

Czy spojrzał na: std :: bitset (dla stałej wielkości zbiorów Flag) boost :: dynamic_bitset (do zestawów flag dynamiczny rozmiar)

ustawianie dolnego 8 bitów z rzędu:

#include <bitset> 
#include <iostream> 


int main() 
{ 
    std::bitset<12>  flags; 
    flags |= 0x0FF; 

    std::cout << flags; 
} 
+0

Dzięki. Już zdałem sobie sprawę z szaleństwa używania wektora i przełączyłem się na wektor . Właściwie szukałem bardziej ogólnego rozwiązania tego problemu. – Dima