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   -
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

  1. 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];
             }
    1
    1. Voking Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   1
       
      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
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Voking Messages postés 21 Date d'inscription   Statut Membre Dernière intervention  
         
        as-tu essayé la suggestion avec begin?
        0