Come cin a un vettore

Sto provando a chiedere all’utente di inserire numeri che sono messi in un vettore, quindi utilizzando una chiamata di funzione per coutire i numeri, perché non funziona? Sono in grado di comporre solo il primo numero.

template  void write_vector(const vector& V) { cout << "The numbers in the vector are: " << endl; for(int i=0; i < V.size(); i++) cout << V[i] << " "; } int main() { int input; vector V; cout << "Enter your numbers to be evaluated: " <> input; V.push_back(input); write_vector(V); return 0; } 

Com’è, stai leggendo solo in un singolo intero e spingendolo nel tuo vettore. Dato che probabilmente vuoi memorizzare diversi numeri interi, hai bisogno di un ciclo. Ad esempio, sostituire

 cin >> input; V.push_back(input); 

con

 while (cin >> input) V.push_back(input); 

Ciò che fa è continuamente tirare avanti da cin fino a quando c’è un input da afferrare; il ciclo continua fino a quando cin trova EOF o tenta di immettere un valore non intero. L’alternativa è usare un valore sentinella, anche se questo ti impedisce di inserire effettivamente quel valore. Ex:

 while ((cin >> input) && input != 9999) V.push_back(input); 

leggerà fino a quando non proverai ad inserire 9999 (o uno qualsiasi degli altri stati che rendono non valido il cin), a quel punto il ciclo terminerà.

Altre risposte potrebbero non consentire un determinato numero o dire all’utente di inserire qualcosa di non numerico per terminare l’input. Forse una soluzione migliore è usare std::getline() per leggere una riga di input, quindi usare std::istringstream per leggere tutti i numeri da quella linea nel vettore.

 #include  #include  #include  int main(int argc, char** argv) { std::string line; int number; std::vector numbers; std::cout << "Enter numbers separated by spaces: "; std::getline(std::cin, line); std::istringstream stream(line); while (stream >> number) numbers.push_back(number); write_vector(numbers); } 

Inoltre, l’implementazione write_vector() può essere sostituita con una chiamata più idiomatica all’algoritmo std::copy() per copiare gli elementi in uno std::ostream_iterator in std::cout :

 #include  #include  template void write_vector(const std::vector& vector) { std::cout << "Numbers you entered: "; std::copy(vector.begin(), vector.end(), std::ostream_iterator(std::cout, " ")); std::cout << '\n'; } 

Puoi anche usare std::copy() e un paio di utili iteratori per ottenere i valori nel vettore senza un ciclo esplicito:

 std::copy(std::istream_iterator(stream), std::istream_iterator(), std::back_inserter(numbers)); 

Ma probabilmente è eccessivo.

Hai bisogno di un ciclo per quello. Quindi fai questo:

 while (cin >> input) //enter any non-integer to end the loop! { V.push_back(input); } 

Oppure usa questa versione idiomatica:

 #include  //for std::istream_iterator std::istream_iterator begin(std::cin), end; std::vector v(begin, end); write_vector(v); 

Potresti anche migliorare il tuo write_vector come:

  #include  //for std::copy template  void write_vector(const vector& v) { cout << "The numbers in the vector are: " << endl; std::copy(v.begin(), v.end(), std::ostream_iterator(std::cout, " ")); } 

hai 2 opzioni:

Se sai che la dimensione del vettore sarà (nel tuo caso / esempio sembra che tu lo sappia):

 vector V(size) for(int i =0;i>V[i]; } 

se non lo fai e non riesci a inserirlo nel stream del tuo programma, allora:

 int helper; while(cin>>helper){ V.push_back(helper); } 

Hai bisogno di un secondo intero.

 int i,n; vector V; cout << "Enter the amount of numbers you want to evaluate: "; cin >> i; cout << "Enter your numbers to be evaluated: " << endl; while (V.size() < i && cin >> n){ V.push_back(n); } write_vector(V); return 0; 

One-liner per leggere una quantità fissa di numeri in un vettore (C ++ 11):

 #include  #include  #include  #include  #include  int main() { const std::size_t LIMIT{5}; std::vector collection; std::generate_n(std::back_inserter(collection), LIMIT, []() { return *(std::istream_iterator(std::cin)); } ); return 0; } 

cin è delimitato dallo spazio, quindi se provi a “1 2 3 4 5” in un singolo numero intero, assegnerai solo 1 al numero intero, un’opzione migliore è di avvolgere il tuo input e push_back in un ciclo, e fare test per un valore sentinella, e su quel valore sentinella, chiamare la funzione di scrittura. ad esempio

 int input; cout << "Enter your numbers to be evaluated, and 10000 to quit: " << endl; while(input != 10000) { cin >> input; V.push_back(input); } write_vector(V); 

Probabilmente vorrai leggere più numeri, non solo uno. Per questo, hai bisogno di un ciclo

 int main() { int input = 0; while(input != -1){ vector V; cout << "Enter your numbers to be evaluated: " << endl; cin >> input; V.push_back(input); write_vector(V); } return 0; } 

Nota, con questa versione, non è ansible aggiungere il numero -1 poiché è il “segnale finale”. Digita i numeri finché vuoi, verrà annullato quando digiti -1.

Puoi farlo semplicemente con l’aiuto di for loop
-> Chiedi su runtime da un utente ( quanti ingressi vuole inserire ) e lo stesso trattamento come array.

 int main() { int sizz,input; std::vector vc1; cout<< "How many Numbers you want to enter : "; cin >> sizz; cout << "Input Data : " << endl; for (int i = 0; i < sizz; i++) {//for taking input form the user cin >> input; vc1.push_back(input); } cout << "print data of vector : " << endl; for (int i = 0; i < sizz; i++) { cout << vc1[i] << endl; } } 
 #include #include #include using namespace std; int main() { vectorV; int num; cin>>num; string input; while (cin>>input && num != 0) //enter any non-integer to end the loop! { //cin>>input; V.push_back(input); num--; if(num==0) { vector::iterator it; for(it=V.begin();it!=V.end();it++) cout<<*it< 

In questo caso il tuo ciclo di tempo sarà simile

 int i = 0; int a = 0; while (i < n){ cin >> a; V.push_back(a); ++i; } 

La size() iniziale size() di V sarà 0, mentre int n contiene qualsiasi valore casuale perché non lo si inizializza.

V.size() < n è probabilmente falso.

Sciocco mi mancava "Enter the amount of numbers you want to evaluate: "

Se inserisci un n che è più piccolo di V.size() in quel momento, il ciclo terminerà.

Basta aggiungere un’altra variabile.

 int temp; while (cin >> temp && V.size() < n){ V.push_back(temp); } 
 #include #include #include using namespace std; int main() { vector v; string line,t; getline(cin,line); istringstream iss(line); while(iss>>t) v.push_back(t); vector::iterator it; for(it=v.begin();it!=v.end();it++) cout<<*it< 

sarebbe più facile se specifichi la dimensione del vettore prendendo un input:

 int main() { int input,n; vector V; cout<<"Enter the number of inputs: "; cin>>n; cout << "Enter your numbers to be evaluated: " << endl; for(int i=0;i> input; V.push_back(input); } write_vector(V); return 0; } 
 #include using namespace std; int main() { int x,n; cin>>x; vector v; cout<<"Enter numbers:\n"; for(int i=0;i>n; v.push_back(n); } //displaying vector contents for(int p : v) cout< 

Un modo semplice per prendere input nel vettore.