Erreur "no matching function"

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. Contributeur
    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. 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
    2. Contributeur
      @Vokingas-tu essayé la suggestion avec begin?
      0