我有一个布尔向量。我需要将其元素从 n-th 设置为 m-th 到true
. 有没有一种优雅的方法可以在不使用循环的情况下做到这一点?
编辑:向所有指出使用vector<bool>
. 但是,我一直在寻找更通用的解决方案,例如 jalf 给出的解决方案。
我有一个布尔向量。我需要将其元素从 n-th 设置为 m-th 到true
. 有没有一种优雅的方法可以在不使用循环的情况下做到这一点?
编辑:向所有指出使用vector<bool>
. 但是,我一直在寻找更通用的解决方案,例如 jalf 给出的解决方案。
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);
布尔向量。让我脊背发凉。
你看过:std::bitset(用于固定大小的标志集) boost::dynamic_bitset(用于动态大小的标志集)
连续设置低 8 位:
#include <bitset>
#include <iostream>
int main()
{
std::bitset<12> flags;
flags |= 0x0FF;
std::cout << flags;
}
据我所知,不是。您可以尝试使用诸如 std::for_each、std::replace 或 std::fill 之类的算法之一来隐藏您正在循环元素范围的事实,但您会循环。
鉴于您说您使用的是布尔向量 - 如果您使用的是专业化 std::vector,您可能需要阅读Herb Sutter 的这篇文章中的“bool 怎么样”部分。