Erreur "no matching function"

Fermé
Voking Messages postés 21 Date d'inscription dimanche 14 avril 2019 Statut Membre Dernière intervention 13 octobre 2019 - Modifié le 12 oct. 2019 à 17:23
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 - 13 oct. 2019 à 21:05
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

yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
Modifié le 12 oct. 2019 à 17:56
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
Voking Messages postés 21 Date d'inscription dimanche 14 avril 2019 Statut Membre Dernière intervention 13 octobre 2019 1
13 oct. 2019 à 18:24
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.
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > Voking Messages postés 21 Date d'inscription dimanche 14 avril 2019 Statut Membre Dernière intervention 13 octobre 2019
13 oct. 2019 à 21:05
as-tu essayé la suggestion avec begin?
0