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 :

vector et copie


Sujet :

C++

Vue hybride

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Par défaut vector et copie
    Bonjour,

    Ma question est toute simple mais je ne trouve pas la réponse...

    J'ai un vector contenant disons 100 doubles.

    J'aimerais pouvoir crée un vector contenant les valeurs des positions 20 a 40 de mon gros vector.

    En gros un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monPetitVect<double> = new vector (monGrosVect[20]; monGrosVect[40]);
    Mon petit vector contiendrait donc 20 doubles qui sont les valeurs contenus dans mon gros vector aux positions de 20 a 40.

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par défaut
    Salut,

    Je procède de la façon suivante mais il y a sans doute mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::vector<double>::const_iterator first = myVector.begin() + 20;
    std::vector<double>::const_iterator last = myVector.begin() + 40;
    std::vector<double> subcopyMyVector(first, last);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Par défaut
    Salut!

    Merci pour ta réponse mais il me semble qu'il y a plus rapide (vieux souvenirs de mes études...^^)

  4. #4
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    Citation Envoyé par vince3320 Voir le message
    Salut!

    Merci pour ta réponse mais il me semble qu'il y a plus rapide (vieux souvenirs de mes études...^^)
    non, il y a plus court comme code donc plus rapide à écrire comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<double> subcopyMyVector(myVector.begin() + 20, myVector.begin() + 40);
    ou alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<double> subcopyMyVector(&myVector[20],&myVector[40]);
    Mais ça ne sera pas plus rapide à l'exécution.

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Si le vecteur n'est pas destiné à être modifié, le mieux est encore de ne pas le copier. En effet, les algos de la STL (et ceux qui programment correctement) utilisent une itérateur sur le premier et le dernier+1 élément. Donc il est possible d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unAlgo(myVector.begin() + 20, myVector.begin() + 40);
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::vector<double> subcopyMyVector(myVector.begin() + 20, myVector.begin() + 40);
    unAlgo(subcopyMyVector.begin(), subcopyMyVector.end());
     
    // ou encore plus moche
    unAlgo(subcopyMyVector);

  6. #6
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Si le vecteur n'est pas destiné à être modifié, le mieux est encore de ne pas le copier. En effet, les algos de la STL (et ceux qui programment correctement) utilisent une itérateur sur le premier et le dernier+1 élément. Donc il est possible d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unAlgo(myVector.begin() + 20, myVector.begin() + 40);
    Et même depuis C++11 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unAlgo(myVector.cbegin() + 20, myVector.cbegin() + 40);

Discussions similaires

  1. vector et copy constructor
    Par r0d dans le forum Langage
    Réponses: 5
    Dernier message: 27/12/2012, 19h49
  2. [Vector] Copie des éléments lors d'un push_back() ?
    Par 5kippy dans le forum SL & STL
    Réponses: 4
    Dernier message: 22/11/2007, 11h11
  3. copie de <vector>
    Par dev0077 dans le forum C++
    Réponses: 1
    Dernier message: 05/10/2007, 22h19
  4. Copie de 2 vectors STL
    Par cjacquel dans le forum SL & STL
    Réponses: 2
    Dernier message: 07/12/2006, 21h20
  5. copie vector
    Par Vips dans le forum SL & STL
    Réponses: 11
    Dernier message: 25/03/2006, 11h52

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