既に構築されたビットセット オブジェクトの set() 関数は知っていますが、すべてのビットが 1 である構築されたビットセットが必要です。この状況は、デフォルトの関数パラメーターです。例えば:
void bar(std::bitset<100> flags = X) {
}
X がどうあるべきか、-1 は最初の 64 ビットで機能する可能性がありますが、すべてではありません。
既に構築されたビットセット オブジェクトの set() 関数は知っていますが、すべてのビットが 1 である構築されたビットセットが必要です。この状況は、デフォルトの関数パラメーターです。例えば:
void bar(std::bitset<100> flags = X) {
}
X がどうあるべきか、-1 は最初の 64 ビットで機能する可能性がありますが、すべてではありません。
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.
驚くべきことに、 andset()
よりもはるかに高速ですoperator ~
flip
あなたは使うことができますstd::bitset<100> = std::bitset<100>(std::string(100, '1'))
が、それは少し醜いです