16

我有一个布尔向量。我需要将其元素从 n-th 设置为 m-th 到true. 有没有一种优雅的方法可以在不使用循环的情况下做到这一点?

编辑:向所有指出使用vector<bool>. 但是,我一直在寻找更通用的解决方案,例如 jalf 给出的解决方案。

4

3 回答 3

45

std::fillstd::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); 
于 2009-07-16T16:21:40.243 回答
5

布尔向量。让我脊背发凉。

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

连续设置低 8 位:

#include <bitset>
#include <iostream>


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

    std::cout << flags;
}  
于 2009-07-16T16:53:47.947 回答
3

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

鉴于您说您使用的是布尔向量 - 如果您使用的是专业化 std::vector,您可能需要阅读Herb Sutter 的这篇文章中的“bool 怎么样”部分。

于 2009-07-16T16:28:58.713 回答