Je rencontre une erreur que je n'ai jamais vue auparavant et qui indique que la référence aux choses est ambiguë. Je suis en train d'écrire un petit programme de test qui calcule une médiane en cours d'exécution. Au fur et à mesure que la liste grossit, elle recalcule la médiane. Dans ce cas, la médiane signifie le numéro du milieu dans la liste (ou le haut du milieu). Ainsi, la médiane de 7 est 7, la médiane de 7 et 9 est 9, et la médiane de 7 3 et 9 est 7.Erreur de calcul médian du tri par insertion C++
J'accomplis cela (j'espère) avec deux tableaux dynamiques. Initialement, la première valeur est définie comme la médiane, puis chaque nombre entré est comparé à la médiane actuelle. La médiane est obtenue pour le calcul de l'élément central, entre deux tableaux.
Le tableau de gauche est pour toutes les valeurs inférieures à la médiane, et le tableau de droite est pour tous les plus grands. J'utilise le tri par insertion pour ordonner les nombres dans chaque tableau (c'est super dans les listes presque triées). Je ne comprends tout simplement pas les erreurs que j'obtiens et où je me suis trompé. Je suis relativement nouveau en C++, j'ai donc opté pour une approche plus simple du problème.
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> left;
vector<int> right;
int leftCount = 0;
int rightCount = 0;
void leftInsertionSort(int);
void rightInsertionSort(int);
void inputNumber(int, int);
int main(int argc, char** argv) {
int length = 0;
int value;
int median;
string input;
while (cin >> input) {
value = atoi(input.c_str());
inputNumber(value, median);
if (leftCount > rightCount) {
median = (((leftCount + rightCount)/2) + 1);
cout << left[median];
} else {
median = (((leftCount + rightCount)/2) + 1) - leftCount;
cout << right[median];
}
}
return 0;
}
void inputNumber(int value, int median) {
if (leftCount == 0 && rightCount == 0) {
left[0] = value;
median = value;
leftCount++;
} else
if (leftCount == 1 && rightCount == 0) {
right[0] = value;
if (left[0] > right[0]) {
right[0] = left[0];
left[0] = value;
}
median = right[0];
rightCount++;
} else
if (value < median) {
left[leftCount] = value;
} else {
right[rightCount] = value;
}
}
void leftInsertionSort(int lLength)
{
leftCount++;
int key, i;
for(int j = 1; j < lLength; j++)
{
key = left[j];
i = j - 1;
while (left[i] > key && i >= 0) {
left[i+1] = left[i];
i--;
}
left[i+1] = key;
}
}
void rightInsertionSort(int rLength)
{
rightCount++;
int key, i;
for(int j = 1; j < rLength; j++)
{
key = right[j];
i = j - 1;
while (right[i] > key && i >= 0) {
right[i+1] = right[i];
i--;
}
right[i+1] = key;
}
}
L'erreur que je semble être obtenir est «erreur: référence à la « gauche » est ambigu
Et, quelles sont les erreurs? –
erreur: la référence à 'gauche' est ambigu – Edge
Je reçois la même chose pour la droite – Edge