/ / Codifica C ++ con array 2D - c ++

Codifica C ++ con array 2D - c ++

Sto cercando di imparare C ++ e provare a scrivere un codice per una tabella hash semplice come la seguente struttura:

array[0][0] array[0][1] array[0][2]
key 1        value 1      value 2

array[1][0] array[1][1]
key 2        value 3

array[2][0] array[2][1] array[2][2]
key 3        value 4      value 5

significa Array of Dynamic Arrays. Ora, sotto c'è il mio codice:

#include<iostream>
#include<conio.h>

using namespace std;

int ele [10] ;
int** arrays = new int*[10] ;

class HashTable
{
public:

HashTable()
{
for(int i = 0 ; i < 10 ; i++)
ele[i] = - 1 ;     // element array stores the number of elements in column of each row
}

void put(int key, int value){
if(ele[key] == -1){
arrays[key] = new int[1];
arrays[key][0] = value ;  // initialize 2nd dimention
ele[key] = 0 ;
}
else{
int num = ele[key] ;
int temp[num + 1] ;
for(int i = 0 ; i < num ; i++)
temp [i] = arrays[key][i] ;
temp[num+1] = value ;
arrays[key] = new int[num + 1] ;
for(int i = 0 ; i < num+1 ; i++)       // take all the elements in an temporary array and store it back
arrays[key][i] = temp [i] ;
ele[key] = num + 1 ;
}

}

};

main()
{

HashTable object;

object.put(0 , 100);
object.put(1 , 200);
object.put(3 , 300);
object.put(3 , 3000);
object.put(3 , 30000);
object.put(5 , 500);
object.put(5 , 5000);
object.put(5 , 50000);
object.put(5 , 50);


for (int i = 0 ; i < 10 ; i++ ){
int j = ele[i] ;

cout << j << " K ";

if(j != -1){
for (int k = -1 ; k < j ; k++ )    // print the values of corresponding keys
cout << arrays[i][k] << "  ";
}
}


getch();
return 0;
}

che usa il metodo put per inserire valori nella HashTable personalizzata.

Qualcuno può aiutarmi perché il codice precedente fornisce un valore di output errato durante il tentativo di recuperare i valori della chiave corrispondente.

risposte:

2 per risposta № 1

Questo non può funzionare:

for (int k = -1 ; k < j ; k++ )
cout << arrays[i][k] << "  ";

Non puoi avere array con indici negativi. Quando entri nel ciclo, lo hai k = -1 quindi provi ad accedere arrays[i][-1], che non ha funzionato.

Altre raccomandazioni:

  • Gli oggetti arrays e ele dovrebbe essere membri della tua classe ed essere dichiarato al suo interno (come membri privati)
  • Sulla linea in cui scrivi arrays[key] = new int[num + 1], ti sei dimenticato di chiamare delete sull'oggetto precedente. Ciò causerà a perdita di memoria.
  • Dovresti stampare il tuo arrays usando un metodo all'interno della tua funzione (come il put metodo) e quindi basta chiamarlo usando object.print() (se lo hai chiamato print)
  • analisi if(j != -1) prima del ciclo for (int k = -1; k < j; k++) è ridondante: se j == -1 comunque non entrerai mai nel ciclo.