Erreur "no matching function"

Messages postés
21
Date d'inscription
dimanche 14 avril 2019
Statut
Membre
Dernière intervention
13 octobre 2019
-
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
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
8739
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 octobre 2019
436
1
Merci
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];
         }

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 64015 internautes nous ont dit merci ce mois-ci

Voking
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.
yg_be
Messages postés
8739
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 octobre 2019
436 > Voking
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?
Commenter la réponse de yg_be