Erreur "no matching function"
Voking
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
ma dernière question ayant été ignorée, je la réitère. Je souhaite créer une sous-matrice à partir d'une matrice donnée, c'est-à-dire copier cette matrice dans une nouvelle, vide, pour supprimer la i-ème ligne et la j-ème colonne de cette dernière.
Voici la fonction que j'ai codée, permettant de créer une sous-matrice:
Lors de l'exécution, une erreur apparaît:
error: no matching function for call to 'std::vector<double>::erase(int)'
Que signifie-t-elle? Merci de vos réponses! :)
ma dernière question ayant été ignorée, je la réitère. Je souhaite créer une sous-matrice à partir d'une matrice donnée, c'est-à-dire copier cette matrice dans une nouvelle, vide, pour supprimer la i-ème ligne et la j-ème colonne de cette dernière.
Voici la fonction que j'ai codée, permettant de créer une sous-matrice:
vector<double> submat(const vector<double> &A, int N, int i, int j)
{
vector<double> Sub_mtx(N*N, 0.); // sous-matrice
for(int lgn = 0; lgn < N; lgn++) // remplir la s-m
for(int col = 0; col < N; col++)
Sub_mtx[lgn*N + col] = A[lgn*N + col];
for(int lgn = 0; lgn < N; lgn++) // suppr les élém de la col,
if(lgn != i) // sauf celui de la lgn à suppr
Sub_mtx.erase(lgn*N + j);
Sub_mtx.erase(i*N - i, (i + 1)*N - i); // suppr la lgn, décalée i fois
return Sub_mtx;
}
Lors de l'exécution, une erreur apparaît:
error: no matching function for call to 'std::vector<double>::erase(int)'
Que signifie-t-elle? Merci de vos réponses! :)
Configuration: Windows / Chrome 77.0.3865.90
1 réponse
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
je pense que cela signifie que tu ne peux pas appeler la fonction erase (sur un objet de type vector) avec un paramètre de type int.
peut-être ainsi?Sub_mtx.erase(Sub_mtx.begin() + lgn*N + j);
moi, je ferais différemment: à la copie, je ne copierais que les données que je veux garder.vector<double> Sub_mtx((N-1)*(N-1), 0.); // sous-matrice for(int lgn = 0; lgn < i; lgn++) // remplir la s-m { for(int col = 0; col < j; col++) Sub_mtx[lgn*(N-1) + col] = A[lgn*N + col]; for(int col = j+1; col < N; col++) Sub_mtx[lgn*(N-1) + col-1] = A[lgn*N + col]; } for(int lgn = i+1; lgn < N; lgn++) // remplir la s-m { for(int col = 0; col < j; col++) Sub_mtx[(lgn-1)*(N-1) + col] = A[lgn*N + col]; for(int col = j+1; col < N; col++) Sub_mtx[(lgn-1)*(N-1) + col-1] = A[lgn*N + col]; }-
C'est une approche fort intéressante, merci de la proposition! Par curiosité, je souhaiterais également comprendre la méthode où je retire des éléments. La fonction .begin( ) que tu as utilisée donne le premier élément du vector, c'est bien ça? Je ne saisis pas si l'erreur provient du fait que je ne l'ai pas utilisée.
-