私は、多数の要素を持つ配列を表すプログラムを作成しており、ほとんどがゼロで、20 個以下が非ゼロです。理論的には、配列は 1 兆個の要素を持つことができますが、2 つの別個の配列は、2 つの非ゼロ要素の配列インデックスと値を表します。私が今抱えている問題は、デバッグ目的で値配列を出力できないことです。値の配列を出力しようとすると、得られるのはゼロだけですが、合計を出力すると 820 になります。また、これは宿題であり、パブリック クラス宣言を変更することはできません。デバッグのために自分で書いているときの出力関数。助けてくれてありがとう。
class SparseArray{
public:
SparseArray(); // construct an SparseArray with no nonzero elements
unsigned get( unsigned long long index ); // return an element from the array
SparseArray & set( unsigned long long index, unsigned value ); // set array element to value
SparseArray & output ();
private:
unsigned long long indexArray[21];
unsigned valueArray[21];
unsigned nonzero;
}; // SparseArray
int main(int argc, const char * argv[])
{
SparseArray a;
unsigned long long index = 1;
for( unsigned i = 0; i <= 20; i++, index *= 4 )
a.set( index, i );
a.output();
unsigned total = 0;
index = 1;
for( unsigned i = 0; i <= 40; i++, index *= 2 ){
total += a.get(index);
a.output();
}
cout <<total;
return 0;
}
SparseArray::SparseArray():
indexArray(),valueArray()
{
for (int i = 0; i < 20; i++) {
indexArray[i] = 0;
valueArray[i] = 0;
}
}
unsigned SparseArray::get( unsigned long long index ){
unsigned object;
for (unsigned i = 0; i < 20; i++) {
if (indexArray[i] == index) {
object = valueArray[i];
}
}
return object;
}
SparseArray & SparseArray::set( unsigned long long index, unsigned value ){
for (int i = 0; i < 20; i++) {
if (indexArray[i] == 0 && valueArray == 0) {
indexArray[i] = index;
valueArray[i] = value;
break;
}
}
return *this;
}
SparseArray & SparseArray::output (){
for (int k = 0; k < 21; k++) {
cout << valueArray[k] << "," << endl;
}
return *this;
}