J'ai donc les tableaux A et B, deux d'entre eux contiennent des nombres aléatoires et je dois écrire dans le tableau C initialement des nombres pairs de A et B, puis impairs. J'ai créé ce vecteur avec un vecteur mais je me demande s'il existe une autre façon de le faire, comme en Javascript, il existe des méthodes comme .unshift (), .push () etc.
#include<iostream> #include<vector> using namespace std; int main() { const int n = 4; int A[n]; int B[n]; vector<int>C; for (int i = 0; i < n; i++) { A[i] = rand() % 10; cout << A[i] << " "; } cout << endl; for (int i = 0; i < n; i++) { B[i] = rand() % 30; cout << B[i] << " "; } for (int i = 0; i < n; i += 1) { if (A[i] % 2 == 0) { C.push_back(A[i]); } if (B[i] % 2 == 0) { C.push_back(B[i]); } } for (int i = 0; i < n; i++) { if (A[i] % 2 != 0) { C.push_back(A[i]); } if (B[i] % 2 != 0) { C.push_back(B[i]); } } cout << endl; for (int i = 0; i < C.size(); i++) cout << C[i] << " "; }
4 Réponses :
vector::push_back
est le moyen le plus simple d'avoir une collection qui s'agrandit au fur et à mesure que vous ajoutez des éléments à la fin.
Puisque vous avez une taille fixe pour A et B, vous pouvez en faire des tableaux primitifs à la place, ce que vous avez fait. Mais pour C, vous ne savez pas combien de temps cela durera, donc une collection qui a une taille variable est appropriée.
Vous pouvez utiliser std::array
, si vous connaissez la taille dont vous avez besoin au moment de la compilation. Vous pouvez ensuite ajouter à l'aide d'un itérateur.
#include<vector> using namespace std; int main() { const int n = 4; int A[n]; int B[n]; std::array<int, n+n>C; // <-- here auto C_it = C.begin(); // <-- here for (int i = 0; i < n; i++) { A[i] = rand() % 10; cout << A[i] << " "; } cout << endl; for (int i = 0; i < n; i++) { B[i] = rand() % 30; cout << B[i] << " "; } for (int i = 0; i < n; i += 1) { if (A[i] % 2 == 0) { *C_it++ = A[i]; // <-- here } if (B[i] % 2 == 0) { *C_it++ = B[i]; } } for (int i = 0; i < n; i++) { if (A[i] % 2 != 0) { *C_it++ = A[i]; } if (B[i] % 2 != 0) { *C_it++ = B[i]; } } cout << endl; for (int i = 0; i < C.size(); i++) cout << C[i] << " "; }
Alternativement, si vous voulez être plus sûr, vous pouvez conserver l'index non écrit suivant et accéder aux éléments avec C.at(last++) = A[i]
, qui vérifie les hors limites et lève une exception au lieu de UB.
Je suggérerais d'entrelacer A
et B
départ:
std::stable_partition(C.begin(), C.end(), [](int i) { return i % 2 == 0; });
Et puis partitionner C
en éléments pairs et impairs:
for (int i = 0; i < n; i += 1) { C.push_back(A[i]); C.push_back(B[i]); }
cigien une fois de plus avec la sagesse de la STL.
Eh bien, vous ne changez pas grand-chose.
premier de déclarer le tableau C comme int C[n+n];
et déclarez une variable pour incrémenter via le tableau c comme int j=0;
et en if les instructions de boucles font ceci C[j]=A[i]; j++;
pour le premier si et C[j]=B[i]; j++;
pour la seconde instruction if
int main() { const int n = 4; int A[n]; int B[n]; int C[n+n]; int j=0; for (int i = 0; i < n; i++) { A[i] = rand() % 10; cout << A[i] << " "; } cout << endl; for (int i = 0; i < n; i++) { B[i] = rand() % 30; cout << B[i] << " "; } for (int i = 0; i < n; i += 1) { if (A[i] % 2 == 0) { C[j]=A[i]; j++; } if(B[i]%2==0){ C[j]=B[i]; j++; } } for (int i = 0; i < n; i++) { if (A[i] % 2 != 0) { C[j]=A[i]; j++; } if (B[i] % 2 != 0) { C[j]=B[i]; j++; } } j=0; cout << endl; for (int i = 0; i < C[].lenght(); i++) cout << C[i] << " "; }
Ces fonctions Javascript comme
unshift
,push
et autres font: devinez quoi? Ils fonctionnent sur ce qu'on appellerait unstd::vector
en C ++. Ce que Javascript appelle «tableau», en C ++, c'est un «vecteur». Même chose exactement. Javascript n'est pas C ++. C ++ n'est pas Javascript. Aucune loi n'oblige tous les langages de programmation à utiliser le même nom pour des concepts équivalents.Vous pouvez également consulter l'échange de pile de «révision du code» pour obtenir des commentaires plus critiques sur votre code et vos techniques. Par exemple, utilisez range-for, ne dites pas "en utilisant l'espace de noms", utilisez des algorithmes standard plutôt que d'écrire des boucles explicites, ...