Я пишу программу для представления массива с большим количеством элементов, большинство из которых равны нулю, а не более 20 не равны нулю. Теоретически массив может иметь триллион элементов, но два отдельных массива будут представлять индексы массивов и значения двух ненулевых элементов. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что я не могу вывести массив значений для целей отладки. Когда я пытаюсь вывести массив значений, все, что я получаю, это нули, но когда я вывожу общее количество, я получаю 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;
}
nonzero, но она еще не была реализована. - person Xymostech   schedule 10.04.2013valueArray == 0? - person Thomas Matthews   schedule 10.04.2013forвmain()вы хотите, чтобыSparseArrayпечаталось 40 раз? - person Thomas Matthews   schedule 10.04.2013