C++11 auto itérateur de type std::begin(), std::end() question

J'ai quelques privée de la classe membre, représentant de l'accès aléatoire tableau de std::deque contenant quelques données:

std::vector<std::deque<SomeDataClass> > someMember;

Je tiens à fournir une méthode de classe qui retourne itérable structure de données, contenant tous les éléments de données à partir de mon tableau de deques:

std::deque<SomeDataClass> someMethod();

Je voudrais que cette méthode de passer par tous les deques dans le vecteur et la copie de chaque élément sur un chemin local std::deque, finalement de retourner ce local std::deque en valeur.
Je suis en train de mettre en œuvre cette méthode à l'aide de C++11 auto et std::begin(), std::end():

std::deque<SomeDataClass> MyClassName::someMethod(){
    std::deque<DirectedEdge> allDataItems;
    std::deque<DirectedEdge>::iterator deqIter = allDataItems.begin();
    for(auto it = std::begin(someMember); it != std::end(someMember); ++it){
        std::copy(std::begin(*it), std::end(*it), deqIter);
    }

    return allDataItems;
}

- Je recevoir des données, violation d'accès exception non gérée d'erreur sur l'exécution dans deque en-tête. Ce qui est une erreur?

Vous devriez toujours utiliser != pour mettre fin à l'état lors de l'utilisation d'itérateurs. Rien ne dit que le prochain est le plus avancé dans la mémoire.
Ouais, bien sûr, merci. Je vais modifier ma question, erreur stupide. J'ai encore de violation d'accès.
Rien ne dit donc, en dehors de la norme, tant que le conteneur est un vecteur. Et de toute façon, pour un accès aléatoire itérateurs, operator< ne vous dit pas l'ordre dans la mémoire, mais l'ordre dans la séquence logique (pour d'autres itérateur catégories, il n'est pas du tout défini). Étant donné que seul les récipients utilisés pour le vard du code de vecteur et deque, qui ont tous deux des itérateurs à accès aléatoire, à l'aide de operator< est parfaitement bien (tant que les deux itérateurs appartiennent à la même conteneur, bien sûr).
Je savais que quelqu'un aurait des commentaires sur ce point. Oui, vive les itérateurs fonctionnera très bien avec operator<, mais j'apprécie le fait de pouvoir changer quelque chose sans casser tout le reste. À l'aide de operator!= fonctionne avec tous les itérateur de type. J'aurais fait un peu plus clair, mais mon cinq minutes, il était jusqu'au moment où j'ai pensé à elle.

OriginalL'auteur vard | 2013-07-16

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *