it-swarm.com.de

Wie man zu einem Vektor cin

Ich versuche den Benutzer aufzufordern, Zahlen einzugeben, die in einen Vektor eingegeben werden.... Dann einen Funktionsaufruf verwenden, um die Zahlen zu ermitteln. Ich kann nur die erste Nummer ermitteln.

template <typename T>
void write_vector(const vector<T>& 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<int> V;
  cout << "Enter your numbers to be evaluated: " << endl;
  cin >> input;
  V.Push_back(input);
  write_vector(V);
  return 0;
}
33
Sean

Sie lesen also nur eine einzelne Ganzzahl und schieben sie in Ihren Vektor. Da Sie wahrscheinlich mehrere ganze Zahlen speichern möchten, benötigen Sie eine Schleife. Zum Beispiel ersetzen

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

mit

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

Was dabei geschieht, ist, solange es Eingaben gibt, die man packen muss, kontinuierlich von Cin zu ziehen; Die Schleife wird fortgesetzt, bis cin EOF findet oder versucht, einen nicht ganzzahligen Wert einzugeben. Die Alternative ist die Verwendung eines Sentinel-Werts. Dies verhindert jedoch, dass Sie diesen Wert tatsächlich eingeben. Ex:

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

liest, bis Sie versuchen, 9999 einzugeben (oder einen der anderen Zustände, die cin ungültig machen). An diesem Punkt wird die Schleife beendet.

27
jsinger

Bei anderen Antworten können Sie eine bestimmte Nummer nicht zulassen oder den Benutzer anweisen, etwas Nicht-Numerisches einzugeben, um die Eingabe zu beenden. Eine bessere Lösung ist vielleicht die Verwendung von std::getline(), um eine Zeile der Eingabe zu lesen, und dann mit std::istringstream alle Zahlen aus dieser Zeile in den Vektor einlesen.

#include <iostream>
#include <sstream>
#include <vector>

int main(int argc, char** argv) {

    std::string line;
    int number;
    std::vector<int> 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);

}

Ihre write_vector()-Implementierung kann auch durch einen idiomatischeren Aufruf des std::copy()-Algorithmus ersetzt werden, um die Elemente in einen std::ostream_iterator nach std::cout zu kopieren:

#include <algorithm>
#include <iterator>

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

Sie können auch std::copy() und ein paar praktische Iteratoren verwenden, um die Werte ohne explizite Schleife in den Vektor zu übernehmen:

std::copy(std::istream_iterator<int>(stream),
    std::istream_iterator<int>(),
    std::back_inserter(numbers));

Aber das ist wahrscheinlich übertrieben.

16
Jon Purdy

Dafür brauchst du eine Schleife. Also mach das:

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

Oder verwenden Sie diese idiomatische Version:

#include <iterator> //for std::istream_iterator 

std::istream_iterator<int> begin(std::cin), end;
std::vector<int> v(begin, end);
write_vector(v);

Sie könnten auch Ihren write_vector verbessern:

 #include <algorithm> //for std::copy

template <typename T>
void write_vector(const vector<T>& v)
{
   cout << "The numbers in the vector are: " << endl;
   std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
}
11
Nawaz

sie haben 2 Möglichkeiten:

Wenn Sie wissen, wie groß der Vektor sein wird (in Ihrem Fall/Beispiel scheint es, dass Sie es wissen):

vector<int> V(size)
for(int i =0;i<size;i++){
    cin>>V[i];
 }

wenn dies nicht der Fall ist und Sie es nicht in Ihren Programmfluss bringen können, dann:

int helper;
while(cin>>helper){
    V.Push_back(helper);
}
7
H_meir

One-Liner zum Einlesen einer fixed Anzahl von Zahlen in einen Vektor (C++ 11)

#include <algorithm>
#include <iterator>
#include <iostream>
#include <vector>
#include <cstddef>

int main()
{
    const std::size_t LIMIT{5};
    std::vector<int> collection;

    std::generate_n(std::back_inserter(collection), LIMIT,
        []()
        {
            return *(std::istream_iterator<int>(std::cin));
        }
    );

    return 0;
}
5
Wojciech Migda

Sie brauchen eine zweite ganze Zahl.

int i,n;
vector<int> 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;
4
01d55

cin ist auf Leerzeichen begrenzt. Wenn Sie also versuchen, "1 2 3 4 5" in eine einzelne Ganzzahl zu konvertieren, weisen Sie der Ganzzahl nur 1 zu. Eine bessere Option ist, Ihre Eingabe und Push_back in eine Schleife zu packen Lassen Sie es auf einen Sentinel-Wert testen, und rufen Sie auf diesem Sentinel-Wert Ihre Schreibfunktion auf. sowie

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);
3
johnathan

Sie können dies einfach mit Hilfe von for loop tun
-> Fragen Sie zur Laufzeit nach einem Benutzer (wie viele Eingaben er eingeben möchte) und die gleichen Arrays behandeln.

int main() {
        int sizz,input;
        std::vector<int> 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;
        }
     }
3
Arslan Ahmad
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main()
{
    vector<string>V;
    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<string>::iterator it;
    for(it=V.begin();it!=V.end();it++)
        cout<<*it<<endl;
   };

}
return 0;

};
2
shiva Mirjapur

Sie möchten wahrscheinlich mehr Zahlen einlesen, nicht nur eine Dazu benötigen Sie eine Schleife

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

Beachten Sie, dass es in dieser Version nicht möglich ist, die Zahl -1 hinzuzufügen, da es sich um das "Endsignal" handelt. Geben Sie die Nummern so oft ein, wie Sie möchten. Sie werden abgebrochen, wenn Sie -1 eingeben.

2
poitroae
#include<iostream>
#include<vector>
#include<sstream>
using namespace std;

int main()
{
    vector<string> v;
    string line,t;
    getline(cin,line);
    istringstream iss(line);
    while(iss>>t)
        v.Push_back(t);

    vector<string>::iterator it;
    for(it=v.begin();it!=v.end();it++)
        cout<<*it<<endl;
    return 0;
}
1
shunbenben

In diesem Fall sieht Ihre while-Schleife so aus 

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

Das anfängliche size() von V ist 0, während int n zufällige Werte enthält, da Sie es nicht initialisieren. 

V.size() < n ist wahrscheinlich falsch. </ S>

Dumme mich vermisst den "Enter the amount of numbers you want to evaluate: "

Wenn Sie eine n eingeben, die zu diesem Zeitpunkt kleiner als V.size() ist, wird die Schleife beendet.

1
Thom Wiggers

Fügen Sie einfach eine weitere Variable hinzu.

int temp;
while (cin >> temp && V.size() < n){
    V.Push_back(temp);
}
1

wäre einfacher, wenn Sie die Größe des Vektors durch Eingabe einer Eingabe angeben:

int main()
{
  int input,n;
  vector<int> V;
  cout<<"Enter the number of inputs: ";
  cin>>n;
  cout << "Enter your numbers to be evaluated: " << endl;
  for(int i=0;i<n;i++){
  cin >> input;
  V.Push_back(input);
  }
  write_vector(V);
  return 0;
}
0
#include<bits/stdc++.h>
using namespace std;

int main()
{
int x,n;
cin>>x;
vector<int> v;

cout<<"Enter numbers:\n";

for(int i=0;i<x;i++)
 {
  cin>>n;
  v.Push_back(n);
 }


//displaying vector contents

 for(int p : v)
 cout<<p<<" ";
}

Eine einfache Möglichkeit, die Eingabe in Vektor zu übernehmen.

0
Rohit Ranjan