我正在使用bitset并提高我的代码的性能我想将其更改为动态bitset,但在阅读了与此相关的一些帖子之后,我仍然不知道定义代码的方法.
所以我附上了我的代码,我想知道你们中是否有人可以帮助我给我一些关于我应该修改什么以及如何修改的想法.
提前致谢 :)
// Program that converts a number from decimal to binary and show the positions
// where the bit of the number in binary contains 1
#include <bitset>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
unsigned long long int dec;
bitset<5000> binaryNumber;
bitset<5000> mask;
mask = 0x1;
cout << "Write a number in decimal: ";
cin >> dec;
// Conversion from decimal to binary
int x;
for (x = 0; x < binaryNumber.size(); x++)
{
binaryNumber[x] = dec % 2;
dec = dec / 2;
}
cout << "The number " << dec << " in binary is: ";
for (x = (binaryNumber.size() - 1); x >= 0; x--)
{
cout << binaryNumber[x];
}
cout << endl;
// Storage of the position with 1 values
vector<int> valueTrue;
for (int r = 0; r < binaryNumber.size(); r++) //
{
if (binaryNumber.test(r) & mask.test(r)) // if both of them are bit "1"
// we store in valueTrue vector
{
valueTrue.push_back(r);
}
mask = mask << 1;
}
int z;
cout << "Bit 1 are in position: ";
for (z = 0; z < valueTrue.size(); z++)
{
cout << valueTrue.at(z) << " ";
}
cout << endl;
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
拥有动态bitset的最简单方法是使用一个;) http://www.boost.org/doc/libs/1_36_0/libs/dynamic_bitset/dynamic_bitset.html
更新:提供一个完整的例子
#include<iostream>
#include <boost/dynamic_bitset.hpp>
int main() {
unsigned long long dec;
std::cout << "Write a number in decimal: ";
std::cin >> dec;
boost::dynamic_bitset<> bs(64, dec);
std::cout << bs << std::endl;
for(size_t i = 0; i < 64; i++){
if(bs[i])
std::cout << "Position " << i << " is 1" << std::endl;
}
//system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于那些不使用 Boost 的人 - 您可以使用vector<bool>经过优化的每个元素仅使用 1 位。
http://www.cplusplus.com/reference/stl/vector/