Как установить диапазон элементов в векторе 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.