2009-07-16 13 views

Respuesta

41

std::fill o std::fill_n en el algorithm encabezado debería hacer el truco.

// 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

A mi leal saber y entender. Podría tratar de usar uno de los algoritmos como std :: for_each, std :: replace o std :: fill para ocultar el hecho de que está recorriendo el rango del elemento, pero lo hará.

Dado que dijiste que estás usando un vector de booleanos, si estás utilizando la especialización std :: vector, es posible que quieras leer la sección "qué tal bool" en this article by Herb Sutter.

+0

Me doy cuenta de que siempre hay un bucle debajo del capó. Estaba buscando una forma sintácticamente elegante para ocultarlo. – Dima

+0

Gracias por la advertencia sobre el vector , por cierto. – Dima

5

Vector de bool. Envía escalofríos por mi espina dorsal.

¿Has mirado en: std :: bitset (por tamaño fijo conjuntos bandera) impulso :: dynamic_bitset (para los conjuntos de la bandera de la dinámica)

Establecer la parte inferior 8 bits consecutivas:

#include <bitset> 
#include <iostream> 


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

    std::cout << flags; 
} 
+0

Gracias. Ya me di cuenta de la locura de usar el vector , y cambié al vector . En realidad estaba buscando una solución más general para esto. – Dima

Cuestiones relacionadas