如何在 C++ 中创建一个 Bitset 数组

how to create an array of Bitset in c++

我想创建一个 Bitset 数组。Binary Bitset(例如“100”、“1010”等) 之后我想从用户输入并存储在 Bitset 中。 我尝试了以下行,但显示错误。

#include<bits/stdc++> 
using namespace std;
int main() 
{ 
  int n,i;
  string bit_string; 
  cin>>n  // size of Bitset array.
  bitset<8> brr[n];//  
  for(i=0;i<n;i++)
  {
    cin>>bit_string;
    brr[i](bit_string);
  }



  return 0; 
}  

我想创建 n 个大小为 8 的位集 bits.Where n 由用户提供。 我的输入是二进制字符串。 “110010”,“001110” 请帮忙

错误发生是因为您试图使用 n 创建 C 样式数组,这不是编译时常量。如果在编译时 n 已知,则无法创建 C 样式数组。

以下是做你想做的好方法

创建一个 std::vector<std::bitset<8>> 来存放你的 bitset<8>,如下所示。

请注意,代码会忽略输入字符串中多余的字符,如 "111111110"(使其成为 "11111111"),并将除 '1' 之外的任何字符视为 '0' 并且如果输入字符串少于 8 个字符,代码将默认添加零 bitsets

#include <vector>
#include <bitset>
#include <iostream>
int main() {
    int n, i;
    std::string bit_string;
    std::cout << "Enter the size";
    std::cin >> n; // size of Bitset array.
    std::vector<std::bitset<8>> brr(n);//
    for (i = 0; i < n; i++) {
        std::cin >> bit_string;
        for (int j{}; j < bit_string.size() && j < 8; ++j) {
            brr[i][j] = (bit_string[j] == '1') ? 1 : 0;
        }
    }
    //To test

    for(auto const& el :brr)
    {
        for(int i{}; i < 8;)
            std::cout << el[i++];
        std::cout<<"\n";
    }
}

Why is "using namespace std;" considered bad practice?

对于对象的动态计数,请尝试使用 vector<> 而不是 array[]


#include<bits/stdc++> 
using namespace std;
int main()
{
    int n, i;
    string bit_string;
    cin >> n;  // size of Bitset array.

    vector<bitset<8>> arr;      //size()=>0
    arr.resize(n);      //size()=>n

    for (i = 0; i < n; i++)
    {
        cin >> bit_string;
        bitset<8>& br = arr[i]; //get the i of n

        int maxlen = 8;
        if (bit_string.size() <= 8)
            maxlen = bit_string.size();
        else
            cout << "warning invalid len " << bit_string.size() << " of " << bit_string << endl;

        for (int j = 0; j < maxlen; j++)
        {
            if (bit_string[j] == '1')
                br.set(j, true);
        }

        //cout << endl << br << endl;   //output test
    }

    return 0;
}

如果你还想使用数组,请尝试这种方式


#include<bits/stdc++> 
using namespace std;
int main()
{
    int n, i;
    string bit_string;
    cin >> n;  // size of Bitset array.

    bitset<8>* arr = new bitset<8>[n];

    for (i = 0; i < n; i++)
    {
        cin >> bit_string;
        bitset<8>& br = arr[i]; //get the i of n

        int maxlen = 8;
        if (bit_string.size() <= 8)
            maxlen = bit_string.size();
        else
            cout << "warning invalid len " << bit_string.size() << " of " << bit_string << endl;

        for (int j = 0; j < maxlen; j++)
        {
            if (bit_string[j] == '1')
                br.set(j, true);
        }

        //cout << endl << br << endl;   //output test
    }

    delete[] arr;   //IMPROTAND , delete the array and free memory

    return 0;
}