Как связать вектор
Я пытаюсь попросить пользователя ввести числа, помещенные в вектор,
затем, используя вызов функции для вывода чисел, почему это не
за работой? Я могу только отключить первый номер.
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;
}
Ответы
Ответ 1
Как есть, вы читаете только одно целое и вставляете его в свой вектор. Поскольку вы, вероятно, хотите сохранить несколько целых чисел, вам нужен цикл. Например, замените
cin >> input;
V.push_back(input);
с
while (cin >> input)
V.push_back(input);
То, что это делает, постоянно тянет ints от cin до тех пор, пока есть вход для захвата; цикл продолжается до тех пор, пока cin не обнаружит EOF или не попытается ввести нецелое значение. Альтернативой является использование контрольного значения, хотя это мешает вам фактически ввести это значение. Пример:
while ((cin >> input) && input != 9999)
V.push_back(input);
будет читать до тех пор, пока вы не попытаетесь ввести 9999 (или любое другое состояние, которое делает cin недействительным), после чего цикл завершится.
Ответ 2
В других ответах вам будет отказано определенное число или сообщите пользователю ввести что-то нечисловое, чтобы завершить ввод. Возможно, лучшим решением является использование std::getline()
для чтения строки ввода, затем используйте std::istringstream
, чтобы прочитать все числа из этой строки в вектор.
#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);
}
Кроме того, ваша реализация write_vector()
может быть заменена более идиоматическим вызовом алгоритма std::copy()
для копирования элементов в std::ostream_iterator
в std::cout
:
#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';
}
Вы также можете использовать std::copy()
и пару удобных итераторов для получения значений в векторе без явного цикла:
std::copy(std::istream_iterator<int>(stream),
std::istream_iterator<int>(),
std::back_inserter(numbers));
Но это, вероятно, перебор.
Ответ 3
Для этого вам нужен цикл. Так сделайте это:
while (cin >> input) //enter any non-integer to end the loop!
{
V.push_back(input);
}
Или используйте эту идиоматическую версию:
#include <iterator> //for std::istream_iterator
std::istream_iterator<int> begin(std::cin), end;
std::vector<int> v(begin, end);
write_vector(v);
Вы также можете улучшить свой write_vector
как:
#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, " "));
}
Ответ 4
Вам понадобится второе целое число.
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;
Ответ 5
у вас есть 2 варианта:
Если вы знаете, что размер вектора будет (в вашем случае/примере, кажется, вы его знаете):
vector<int> V(size)
for(int i =0;i<size;i++){
cin>>V[i];
}
если вы этого не сделаете, и вы не можете получить его в своем программном потоке, а затем:
int helper;
while(cin>>helper){
V.push_back(helper);
}
Ответ 6
cin разделяется на пробел, поэтому, если вы попытаетесь cin "1 2 3 4 5" в одно целое число, ваш единственный будет назначать 1 целому числу, лучший вариант - обернуть ваш вход и push_back в loop и проверите его для значения дозорного устройства, а на этом контрольном значении вызовите функцию записи. таких как
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);
Ответ 7
Однострочный шрифт для чтения числа фиксированных чисел в вектор (С++ 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;
}
Ответ 8
Вероятно, вы захотите прочитать больше чисел, а не только один.
Для этого вам понадобится цикл
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;
}
Обратите внимание, что с этой версией невозможно добавить число -1, так как это "конечный сигнал".
Введите числа до тех пор, пока вам нравится, он будет прерван при вводе -1.
Ответ 9
Вы можете просто сделать это с помощью для цикла
- > Спросить во время выполнения от пользователя (сколько входных данных он хочет ввести) и обрабатывать такие же, как массивы.
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;
}
}
Ответ 10
#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;
};
Ответ 11
В этом случае ваш цикл while
будет выглядеть как
int i = 0;
int a = 0;
while (i < n){
cin >> a;
V.push_back(a);
++i;
}
Ответ 12
Начальный size()
of V
будет равен 0, а int n содержит любое случайное значение, потому что вы его не инициализируете.
V.size() < n
, вероятно, неверно.
Глупый я пропустил "Enter the amount of numbers you want to evaluate: "
Если вы введете n
, который меньше чем V.size()
в это время, цикл завершится.
Ответ 13
Просто добавьте еще одну переменную.
int temp;
while (cin >> temp && V.size() < n){
V.push_back(temp);
}
Ответ 14
#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;
}
Ответ 15
было бы проще, если вы указали размер вектора, взяв ввод:
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;
}
Ответ 16
#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<<" ";
}
Простой способ ввода ввода в вектор.