IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Copie d'une partie d'un tableau sur un intervalle régulier


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Par défaut Copie d'une partie d'un tableau sur un intervalle régulier
    Bonjour,
    J'ai un tableau dont je souhaiterai copier une partie sur des pas régulier :

    unsigned char* tab = new char[N];
    je voudrais donc copier seulement certaines cases de ce tableau, toutes les 5 cases par exemple, soit les indices 0, 5, 10, 15, etc. .

    Existe-t-il une méthode rapide (stl ?) pour effectuer ceci

    NB : l'utilisation d'un unsigned char* est le plus approprié dans mon cas (donc pas de réponse du style : utilise un std::vector, c'est mieux )

    Merci d'avance

  2. #2
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,
    Citation Envoyé par olivier21c Voir le message
    je voudrais donc copier seulement certaines cases de ce tableau, toutes les 5 cases par exemple, soit les indices 0, 5, 10, 15, etc. .

    Existe-t-il une méthode rapide (stl ?) pour effectuer ceci
    Une boucle for ?
    A vrai dire ça doit être aussi possible avec un std::copy_if + un prédicat mais c'est beaucoup d'effort pour pas grand chose (copy_if n'est pas présent dans le stl du C++03, il faut se le coder)

    Citation Envoyé par olivier21c Voir le message
    NB : l'utilisation d'un unsigned char* est le plus approprié dans mon cas
    Douteux.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 91
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Bonjour,

    Une boucle for ?
    A vrai dire ça doit être aussi possible avec un std::copy_if + un prédicat mais c'est beaucoup d'effort pour pas grand chose (copy_if n'est pas présent dans le stl du C++03, il faut se le coder)
    ba la boucle c'est ce que j'utilise, mais je me demandais juste si une solution plus rapide n'existait pas...

    Citation Envoyé par Arzar Voir le message
    Douteux.
    Et bien si dans mon cas c'est la meilleur solution (je précise que je ne l'utilise pas opur des chaîne de caractères ^^)

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    Citation Envoyé par olivier21c Voir le message
    Citation Envoyé par Arzar
    Douteux.
    je précise que je ne l'utilise pas opur des chaîne de caractères ^^
    alors c'est encore plus douteux
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Plutôt que de travailler sur un prédicat et std::copy_if, à priori, je serais plutôt intervenu sur l'itérateur. Quelque chose comme un itérateur construit à partir d'un autre itérateur et d'un pas et qui ferait un std::advance lors de l'appel de l'opérateur ++. Ensuite, juste un std::copy avec cet itérateur.

    Citation Envoyé par bruno_pages Voir le message
    Citation Envoyé par olivier21c Voir le message
    Citation Envoyé par Arzar
    Douteux.
    je précise que je ne l'utilise pas opur des chaîne de caractères ^^
    alors c'est encore plus douteux
    Pourquoi a-t-on des doutes ? std::vector<unsigned char> c'est un new unsigned char[] .... avec le RAII en bonus. C'est pour ça qu'on a du mal à comprendre que l'allocation dynamique explicite soit le plus approprié. Si c'est le cas, alors, le std::vector aussi...

  6. #6
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Pourquoi a-t-on des doutes ?
    à cause de la phrase je ne l'utilise pas opur des chaîne de caractères qui semble laissé penser qu'un vecteur de X (autre que des caractères) est casté en unsigned char * afin de réaliser la copie, mais je suis peu être parano ?
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  7. #7
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Plutôt que de travailler sur un prédicat et std::copy_if, à priori, je serais plutôt intervenu sur l'itérateur. Quelque chose comme un itérateur construit à partir d'un autre itérateur et d'un pas et qui ferait un std::advance lors de l'appel de l'opérateur ++. Ensuite, juste un std::copy avec cet itérateur.
    C'est exactement l'approche retenu par boost.RangeEx, qui est actuellement dans le trunk (sous le nom boost.Range) et sera dispo dans la version 1.43 !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    #include <boost/range/algorithm/copy.hpp>
    #include <boost/range/adaptor/strided.hpp>
     
    using boost::copy;
    using boost::begin;
    using boost::adaptors::stride;
     
    int main()
    {
       int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
       int arr2[5];
       int arr3[5];
       int step = 2;
     
       // 1. boucle for
       for(int i = 0, j =0 ; i < 10 ; i += step, j++)
       {
          arr2[j] = arr[i];
       }
     
       // 2. boost.RangeEx
       copy(stride(arr, step), arr3); 
    }
    L'assembleur généré m'a l'air un poil moins bon, mais ce one-liner "copy(stride(arr, step, arr3)" est quand même superbe, non ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/05/2014, 08h12
  2. Calcul sur une partie d'un tableau défini sous VBA
    Par VBA_LOVER dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2009, 12h27
  3. Scrollbar sur une partie d'un tableau
    Par Dams59 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 24/04/2007, 09h40
  4. [Tableau] récupérer une partie d'un tableau
    Par keyra dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 07/02/2006, 22h17
  5. passer une partie d'un tableau en paramettre.
    Par monstroplante dans le forum Langage
    Réponses: 13
    Dernier message: 04/11/2005, 01h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo