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

时间:2009-07-16 16:19:41

标签: c++ stl vector variable-assignment

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

编辑:坦克指向使用vector<bool>指出问题的所有人。但是,我正在寻找一种更通用的解决方案,就像jalf给出的那样。

3 个答案:

答案 0 :(得分:42)

std::fill标题中的

std::fill_nalgorithm可以解决问题。

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

答案 1 :(得分:5)

布尔的矢量。 让我的脊椎发抖。

你看过:     std :: bitset(用于固定大小的标志集)     boost :: dynamic_bitset(用于动态大小标志集)

连续设置最后8位:

#include <bitset>
#include <iostream>


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

    std::cout << flags;
}  

答案 2 :(得分:3)

据我所知。您可以尝试使用其中一个算法,如std :: for_each,std :: replace或std :: fill来隐藏您循环遍历元素范围的事实,但循环您将是。

鉴于你说你正在使用一个布尔值向量 - 如果你使用的是专门化的std :: vector,你可能想阅读this article by Herb Sutter中的“关于bool的内容”部分。