私は夏の OO クラスに参加しており、明日はこのプロジェクトに基づいたテストがあります。基本的に、不特定の量のビットを保持する配列を作成し、この配列に対して演算を実行する 4 つの関数Set() //set bit with given index to 1
( 、Unset() //set bit with given index to 0
、Flip() // change bit (with given index)
および) を作成する必要がありQuery() // return true if the given bit is set to 1, false otherwise
ます。
誰かが興味を持っている場合は、ここに完全な説明があります: http://pastebin.com/v7BCCYjhといくつかのサンプル実行: http://pastebin.com/1ijh5p7p
私が抱えている問題は、高レベルの概念にあります。配列の各インデックスにビットのバイト表現を格納することを意図していると確信しています。それが本当なら、私は機能を実装する方法について完全に途方に暮れています。これにアプローチする方法について誰かが私にいくつかの指針を与えることができれば(私は明日中間試験のためにいくつかの疑似コードを書かなければならないので、今夜までにそれをよく理解する必要があります)、私は大いに感謝します.
.h
それが助けになるなら、これが私のものです
// bitarray.h
//
// BitArray class declaration
#ifndef _BITARRAY_H
#define _BITARRAY_H
#include <iostream>
using namespace std;
class BitArray
{
friend ostream& operator<< (ostream& os, const BitArray& a);
friend bool operator== (const BitArray&, const BitArray&);
friend bool operator!= (const BitArray&, const BitArray&);
public:
BitArray(unsigned int n); // Construct an array that can handle n bits
BitArray(const BitArray&); // copy constructor
~BitArray(); // destructor
BitArray& operator= (const BitArray& a); // assignment operator
unsigned int Length() const; // return number of bits in bitarray
void Set (unsigned int index); // set bit with given index to 1
void Unset (unsigned int index); // set bit with given index to 0
void Flip (unsigned int index); // change bit (with given index)
bool Query (unsigned int index) const; // return true if the given bit
// is set to 1, false otherwise
private:
unsigned char* barray; // pointer to the bit array
int arraySize;
};
#endif
そして私のコンストラクタ:
BitArray::BitArray(unsigned int n){
int size = sizeof(char);
if(n%(8*size) != 0)
arraySize = ((n/(8*size))+1);
else
arraySize = n/(8*size);
barray = new unsigned char[arraySize];
for(int i = 0; i < arraySize; i++)
barray[i] = 0;
}