Erreur "no matching function" [Fermé]

Signaler
Messages postés
21
Date d'inscription
dimanche 14 avril 2019
Statut
Membre
Dernière intervention
13 octobre 2019
-
Messages postés
13254
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
-
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:

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

Messages postés
13254
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
743
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];
         }
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
21
Date d'inscription
dimanche 14 avril 2019
Statut
Membre
Dernière intervention
13 octobre 2019

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.
Messages postés
13254
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 novembre 2020
743 >
Messages postés
21
Date d'inscription
dimanche 14 avril 2019
Statut
Membre
Dernière intervention
13 octobre 2019

as-tu essayé la suggestion avec begin?