3 votes

Adresser un vecteur dans un vecteur de pointeurs vectoriels

Pour mettre en œuvre une table de hachage ouverte en C++, j'ai pensé définir un vecteur qui contient des pointeurs vers des vecteurs contenant des données. Pour simplifier, disons que je veux une table de hachage qui peut stocker int s. J'ai supposé que j'avais besoin d'un vector< vector<int>* > pour ça.

La structure de données résultante pourrait ressembler à ceci :

[index 0] 8, 6, 2

[index 1] (vide)

[indice 2] 9, 12, 15, 28, 1

J'aurais pu créer un tableau statique de vector<int> des pointeurs, mais je voulais pouvoir ajouter des indices au fur et à mesure.

Pour écrire les éléments, je voulais faire quelque chose comme ça :

for (unsigned int i = 0; i < myHashtable.size(); i++) {
  cout << "[index " << i << "]";
  for (unsigned int j = 0; j < myHashtable[i]->size(); j++) {
    cout << " " << *(myHashtable[i])[j];
  }
  cout << "\n";
}

Ce code ne se compile pas. Quelle est la manière correcte d'adresser *(myHashtable[i])[j] ?

7voto

Oli Charlesworth Points 148744
(*myHashtable[i])[j]

Opérateur d'indice ( [] ) se lie plus étroitement que la déréférence ( * ) (voir http://www.cppreference.com/wiki/operator_precedence ). Vous devez donc forcer la liaison en utilisant des parenthèses.

Incidemment, vous pourriez écrire votre boucle interne ainsi :

for (vector<int>::iterator it = myHashtable[i]->begin();
     it != myHashtable[i]->end(); ++it)
{
    cout << " " << *it;
}

3voto

Crashworks Points 22920

Essayez (*(myHashTable[i]))[j] .

3voto

icecrime Points 23650

Simplement (*myHashtable[i])[j]

2voto

vitaut Points 10255

(*myHashtable[i])[j] parce que [] a plus de poids que l'opérateur * opérateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X