En C++, vous ne comptez pas utiliser des tableaux (int[]
ou int*
), parce qu'ils sont ennuyeux de plusieurs façons: vous devez passer autour du SIZE
, ils sont généralement exceptions à risque (vous devez attraper l'exception, supprimez le tableau, puis relancez l'exception), et ils sont difficiles à utiliser correctement en tant que membres de la classe. Utilisez un conteneur de bibliothèque standard ou une plage d'itérateurs.
La façon idiomatiques de faire ce que vous essayez de faire serait d'utiliser les itérateurs et les paires:
template <typename IT_1, typename IT_2>
std::pair<int,int> getChange(IT1 begin, IT1 end, IT2 begin2)
{
for (; begin != end; ++begin, ++begin2)
{
if (*begin != *begin2) return std::make_pair(*begin,*begin2);
}
return std::make_pair(0,0);
}
void main() {
int myNumbers[] = {1, 0, 2, 3};
int possibilities[] = {0, 1, 2, 3};
std::pair<int,int> change = getChange(possibilities, possibilities + 4,
myNumbers);
printf("%i/%i\n", change.first, change.second);
}
Notez que la deuxième séquence (myNumbers) devrait être au moins aussi longtemps que le premier séquence.Si vous n'êtes pas à l'aise avec itérateurs et des modèles de fonction encore, vous pouvez toujours utiliser des vecteurs à la place:
std::pair<int,int> getChange(std::vector<int> a, std::vector<int> b) {
for (int i = 0; i < a.size() && i < b.size(); ++i)
{
if (a[i] != b[i]) return std::make_pair(a[i],b[i]);
}
return std::make_pair(0,0);
}
void main() {
int _myNumbers[] = {1, 0, 2, 3};
int _possibilities[] = {0, 1, 2, 3};
std::vector<int> myNumbers(_myNumbers,_myNuymbers+4),
possibilities(_possibilities,_possibilities+4);
std::pair<int,int> change = getChange(possibilities, myNumbers);
printf("%i/%i\n", change.first, change.second);
}
Bien que ce dernier peut sembler un peu plus bavard que la version du tableau (après tout, il est la création de deux tableaux, puis copier leurs valeurs dans les vecteurs), gardez à l'esprit que l'initialisation d'un tableau à partir d'une constante est une occurrence assez rare: la plupart du temps, les tableaux (et vecteurs) sont initialisés dynamiquement par un morceau de code dédié à cela. Un tel code peut généralement être utilisé à la fois pour les tableaux et les vecteurs avec seulement des changements minimes.
Et, bien sûr, vous pouvez typedef
à la fois std::pair<int,int>
et std::vector<int>
à des noms plus courts si vous finissez par les utiliser beaucoup.
Je suggère que vous obteniez un livre C++ de base, car c'est faux sur tant de niveaux. – Puppy
Saviez-vous que vous avez votre déclaration 'break' en dehors de votre test' if'? Vous ne passerez qu'une seule fois par la boucle for. Je pense qu'il veut être dans le test 'if', donc vous cassez à la première différence. – Chowlett
Avez-vous * besoin * d'utiliser des tableaux ou s'agit-il d'un exercice d'apprentissage? – Tony