Comment passer un vecteur à une fonction?

J’essaie d’envoyer un vecteur comme argument à une fonction et je n’arrive pas à comprendre comment le faire fonctionner. Essayé un tas de différentes manières, mais ils donnent tous des messages d’erreur différents. J’inclus seulement une partie du code, car c’est seulement cette partie qui ne fonctionne pas. (le vecteur “random” est rempli de valeurs aléatoires mais sortingées entre 0 et 200)

Mise à jour du code:

#include  #include  #include  #include  using namespace std; int binarySearch(int first, int last, int search4, vector& random); int main() { vector random(100); int search4, found; int first = 0; int last = 99; found = binarySearch(first, last, search4, random); system("pause"); return(0); } int binarySearch(int first, int last, int search4, vector& random) { do { int mid = (first + last) / 2; if (search4 > random[mid]) first = mid + 1; else if (search4 < random[mid]) last = mid - 1; else return mid; } while (first <= last); return -(first + 1); } 

Cela dépend si vous voulez passer le vector tant que référence ou en tant que pointeur (je ne tiens pas compte de la possibilité de le transmettre par valeur comme étant clairement indésirable).

Pour référence:

 int binarySearch(int first, int last, int search4, vector& random); vector random(100); // ... found = binarySearch(first, last, search4, random); 

Comme un pointeur:

 int binarySearch(int first, int last, int search4, vector* random); vector random(100); // ... found = binarySearch(first, last, search4, &random); 

Dans binarySearch , vous devrez utiliser . ou -> pour accéder aux membres de manière random .

Problèmes avec votre code actuel

  1. binarySearch attend un vector* , mais vous passez dans un vector (il manque un & avant random )
  2. Vous ne déréférencez pas le pointeur dans binarySearch avant de l’utiliser (par exemple, random[mid] devrait être (*random)[mid]
  3. Vous manquez en using namespace std; après le s
  4. Les valeurs que vous atsortingbuez au first et au last sont fausses (doivent être 0 et 99 au lieu de random[0] et random[99]

Vous devrez passer le pointeur au vecteur, pas au vecteur lui-même. Notez le ‘&’ supplémentaire ici:

 found = binarySearch(first, last, search4, &random); 

Vous passez un pointeur *random mais vous l’utilisez comme référence &random

Le pointeur (ce que vous avez) dit “Ceci est l’adresse en mémoire qui contient l’adresse de random”

La référence dit “Ceci est l’adresse de random”

Chaque fois que vous êtes tenté de transmettre une collection (ou un pointeur ou une référence à une collection) à une fonction, demandez-vous si vous ne pouvez pas passer deux iterators à la place. Ce faisant, il est probable que vous rendrez votre fonction plus polyvalente (par exemple, rendre sortingvial le fait de travailler avec des données dans un autre type de conteneur au besoin).

Dans ce cas, bien sûr, il n’y a pas beaucoup de sens puisque la bibliothèque standard a déjà une recherche binary parfaite, mais si vous écrivez quelque chose qui n’est pas déjà là, pouvoir l’utiliser sur différents types de conteneurs est souvent très pratique.

 found = binarySearch(first, last, search4, &random); 

Notez le & .

Vous utilisez l’argument comme référence, mais en réalité c’est un pointeur. Remplacez le vector* par le vector& . Et vous devriez vraiment mettre search4 à quelque chose avant de l’utiliser.

Si vous utilisez random au lieu de * random votre code ne génère aucune erreur