Как установить диапазон элементов в векторе stl для определенного значения?

У меня есть вектор булевых. Мне нужно установить его элементы от n-го до m-го до true. Есть ли элегантный способ сделать это без использования цикла?

Изменить: Танки всем тем, кто указал на проблемы с использованием vector<bool>. Тем не менее, я искал более общее решение, подобное тому, которое задано jalf.

Ответы

Ответ 1

std::fill или std::fill_n в заголовке algorithm должен делать трюк.

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

Ответ 2

Вектор bool. Посылает дрожь по моему позвоночнику.

Вы посмотрели:   std:: bitset (для наборов флагов фиксированного размера)   boost:: dynamic_bitset (для наборов флагов динамического размера)

Установите нижние 8 бит подряд:

#include <bitset>
#include <iostream>


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

    std::cout << flags;
}  

Ответ 3

Насколько мне известно. Вы можете попытаться использовать один из алгоритмов, таких как std:: for_each, std:: replace или std:: fill, чтобы скрыть к факту, что вы перебираете диапазон элементов, но цикл будет вам.

Учитывая, что вы сказали, что используете вектор логических значений - если вы используете специализацию std::vector, вы можете прочитать раздел "как насчет bool" в эта статья Herb Sutter.