Question

J'ai cet exemple de programme d'une étape que je souhaite implémenter dans mon application. Je veux push_back les éléments int sur la chaîne séparément, dans un vecteur. Comment puis-je?

#include <iostream>
#include <sstream>

#include <vector>

using namespace std;

int main(){

    string line = "1 2 3 4 5"; //includes spaces
    stringstream lineStream(line);


    vector<int> numbers; // how do I push_back the numbers (separately) here?
    // in this example I know the size of my string but in my application I won't


    }
Était-ce utile?

La solution

int num;
while (lineStream >> num) numbers.push_back(num);

Autres conseils

Ceci est un exemple classique de std :: back_inserter .

copy(istream_iterator<int>(lineStream), istream_iterator<int>(),
     back_inserter(numbers));

Vous pouvez créer le vecteur dès le début, si vous le souhaitez

vector<int> numbers((istream_iterator<int>(lineStream)), 
                    istream_iterator<int>());

N'oubliez pas de placer des parenthèses autour du premier argument. Le compilateur pense que c'est une déclaration de fonction autrement. Si vous utilisez le vecteur uniquement pour obtenir des itérateurs pour les nombres, vous pouvez directement utiliser les itérateurs istream:

istream_iterator<int> begin(lineStream), end;
while(begin != end) cout << *begin++ << " ";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top