C++ 如何将stl向量中的元素范围设置为特定值?

C++ 如何将stl向量中的元素范围设置为特定值?,c++,stl,vector,variable-assignment,C++,Stl,Vector,Variable Assignment,我有一个布尔向量。我需要将其元素从第n个到第m个设置为true。有没有一种不使用循环的优雅方法 编辑:向所有指出使用vector存在问题的人致意。然而,我正在寻找一个更通用的解决方案,就像jalf给出的解决方案。std::fill或者algorithm标题中的std::fill\n应该可以解决这个问题 // set m elements, starting from myvec.begin() + n to true std::fill_n(myvec.begin() + n, m, true

我有一个布尔向量。我需要将其元素从第n个到第m个设置为
true
。有没有一种不使用循环的优雅方法


编辑:向所有指出使用
vector
存在问题的人致意。然而,我正在寻找一个更通用的解决方案,就像jalf给出的解决方案。

std::fill
或者
algorithm
标题中的
std::fill\n
应该可以解决这个问题

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

据我所知并非如此。您可以尝试使用诸如std::for_each、std::replace或std::fill之类的算法之一来隐藏在元素范围内循环的事实,但循环将是这样

假设你说你使用的是布尔向量-如果你使用的是专业化std::vector,你可能想阅读。

布尔向量中的“布尔如何”一节。 使我脊背发抖

你有没有看过: std::位集(用于固定大小的标志集) boost::dynamic_位集(用于动态大小标志集)

设置一行中的底部8位:

#include <bitset>
#include <iostream>


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

    std::cout << flags;
}  
#包括
#包括
int main()
{
std::位集标志;
标志|=0x0FF;

std::我能意识到引擎盖下总是有一个循环吗?我在寻找一种语法上优雅的方法来隐藏它。顺便说一句,感谢关于向量的警告。谢谢。我已经意识到使用向量的愚蠢,于是我切换到向量。我实际上在寻找一个更通用的解决方案。