371 votes

C++ imprimer le contenu d’un vecteur

Je veux imprimer le contenu d’un vecteur en C++, voici ce que j’ai :

Comment imprimer le contenu du vecteur à l’écran ?

367voto

Zorawar Points 714

Purement pour répondre à votre question, pour autant que je sais vous utilisez un itérateur:

std::vector<char> path;
// ...
for( std::vector<char>::const_iterator i = path.begin(); i != path.end(); ++i)
    std::cout << *i << ' ';

Si vous souhaitez modifier le vecteur contenu dans la boucle, puis utilisez iterator plutôt que d' const_iterator.

Notez que ce n'est pas la seule façon que vous pouvez le faire, mais c'est probablement la "meilleure" façon de le faire la plupart du temps -- vous pouvez également utiliser un int pour enregistrer votre position dans le vecteur, comme vous l'avez fait. Dans ce cas, vous voudrez peut-être regarder à l'aide de la fonction de membre at au lieu de operator[] depuis at lèvera si vous essayez d'accéder à un poste hors de portée. Ce n'est pas un étant donné que ce qui est nécessaire, mais, vous devez penser que ce serait mieux pour que votre code à faire.

208voto

Joshua Kravitz Points 847

Un moyen beaucoup plus facile de le faire est avec la STL algorithme de copie:

#include <iostream>
#include <algorithm> // for copy
#include <iterator> // for ostream_iterator
#include <vector>

int main() {
    /* Set up vector to hold chars a-z */
    std::vector<char> path;
    for (int ch = 'a'; ch <= 'z'; ++ch)
        path.push_back(ch);

    /* Print path vector to console */
    std::copy(path.begin(), path.end(), std::ostream_iterator<char>(std::cout, " "));

    return 0;
}

Le ostream_iterator est ce qu'on appelle un itérateur de l'adaptateur. Il est templatized sur le texte à imprimer pour le flux de données (dans ce cas, char). cout (aka sortie de la console) est le flux nous voulons écrire à, et le caractère espace (" ") est ce que nous voulons imprimée entre chaque élément stocké dans le vecteur.

Cette STL algorithme est puissant et il en est beaucoup d'autres. La puissance et la flexibilité de la STL vous donne sont ce qui rend si grand. Imaginez: vous pouvez imprimer un vecteur de la console avec juste une ligne de code. Vous n'avez pas à traiter avec des cas particuliers avec le caractère de séparation. Vous n'avez pas besoin de s'inquiéter pour des boucles. La STL fait tout pour vous.

66voto

Jefffrey Points 31698

C ++11, vous pouvez maintenant utiliser un basé sur une plage pour la boucle:

39voto

Chris Redford Points 1417

Je pense que la meilleure façon de le faire est juste surcharger `` en ajoutant cette fonction à votre programme :

Vous pouvez alors utiliser le opérateur sur n’importe quel vecteur possible, en supposant que ses éléments ont aussi défini :

Sorties :

8voto

MSalters Points 74024

Le problème réside probablement dans la boucle précédente : . Cette boucle s’exécutera pas du tout (si est non alphanumériques) ou fonctionnera pour toujours (si c’est alpha). La raison est que ne change pas comme est incrémentée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X