14

我知道已经构造的 bitset 对象的 set() 函数,但我需要一个所有位均为 1 的构造 bitset。这种情况是默认函数参数。例如:

void bar(std::bitset<100> flags = X) {
}

X 应该是什么,-1 可能适用于前 64 位,但不是全部。

4

2 回答 2

19
std::bitset<100> bs;
bs.set();

或合并为 1 个语句:

std::bitset<100> bs  = std::bitset<100>().set();

在 C++11 中:

auto bs = std::bitset<100>{}.set();

编辑:或更好地使用std::move以避免复制,因为set返回左值引用bitset&

auto bs = std::move(std::bitset<100>{}.set());

和的性能operator ~flip()set()

std::bitset<100> bs;
clock_t t;
t = clock();
for(int i = 0; i < 1000000; i++) {
    bs = std::bitset<100>().set();
}
t = clock() - t;
std::cout << "Using set() cost: " << t << " clicks." << std::endl;

t = clock();
for(int i = 0; i < 1000000; i++) {
    bs = ~std::bitset<100>();
}
t = clock() - t;
std::cout << "Using ~ cost: " << t << " clicks." << std::endl;

t = clock();
for(int i = 0; i < 1000000; i++) {
    bs = std::bitset<100>().flip();
}
t = clock() - t;
std::cout << "Using flip cost: " << t << " clicks." << std::endl;

输出:

Using set() cost: 59 clicks.
Using ~ cost: 104 clicks.
Using flip cost: 75 clicks.

令人惊讶的是比和set()快得多operator ~flip

于 2013-08-29T16:32:50.650 回答
6

你可以使用std::bitset<100> = std::bitset<100>(std::string(100, '1')),但它有点难看 imo

于 2013-08-29T14:16:26.333 回答