C++ 如何将stl向量中的元素范围设置为特定值?
我有一个布尔向量。我需要将其元素从第n个到第m个设置为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
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::我能意识到引擎盖下总是有一个循环吗?我在寻找一种语法上优雅的方法来隐藏它。顺便说一句,感谢关于向量的警告。谢谢。我已经意识到使用向量的愚蠢,于是我切换到向量。我实际上在寻找一个更通用的解决方案。