Wpisywanie liczb w jednym wierszu (dynamicznie)

0

Hej,
uczę się programować w C++ (dotychczas próbowałem w C#) i mam problem z wpisaniem liczb w jednym wierszu i późniejszym wypełnieniem nimi tablicy. Dokładnie wygląda to tak:

W pierwszym wierszu jest liczba całkowita N. W drugim wierszu jest N liczb całkowitych oddzielonych spacją

Czyli na przykład:

2
1 2

W C# zrobiłbym to w następujący sposób:

int n = int.Parse(Console.ReadLine());
var ab = Console.ReadLine().Split(null);
int[] tab = new int[n];

for (int i = 0; i < tab.Length; i++)
{
   tab[i] = int.Parse(ab[i]);
}

A jak to zrobić w C++?
Dziękuję za pomoc i pozdrawiam.

zamiana znaczników <tt> na <code> i <quote> - fp

0
int n;
cin>>n;
int *tab=new int[n]; //lub vector<int> tab(n);
for(int i=0;i<n;++i) cin>>tab[i];
0

Skompilowany ten C#. W C++ robi się to tak:

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

Pierwsza liczba nie jest w ogóle potrzebna. Można ją wykorzystać do wstępnej alokacji pamięci:

std::size_t count;
std::cin >> count;

std::vector<int> numbers;
numbers.reserve(count);

Jeżeli po tych N liczbach jeszcze coś jest, zamiast std::copy nalezy wykorzystać std::copy_n:

std::copy_n(std::istream_iterator<int>(std::cin), count, std::back_inserter(numbers));

(Albo raczej tak jak niżej jest lepiej to zrobić)

0

@Endrju, w drugiej wersji zdecydowanie przekombinowałeś, wystarczy:

size_t count;
cin>>count;
vector<int> numbers(count);
copy_n(istream_iterator<int>(cin),count,numbers.begin());
0

Dziękuję za pomoc ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1