Можно ли создать динамический массив, не зная его длину в С++?

Рейтинг: 1Ответов: 3Опубликовано: 09.03.2023

Можно ли создать динамический массив не зная его длину? Вот ссылка на задачу(взята с задачника по питону) - https://pythontutor.ru/lessons/lists/problems/even_indices/ В ней не указывается длина массива, как ее можно решить?

Ответы

▲ 2Принят

Вам правильно пишут, что массив создавать не нужно, и можно сразу обрабатывать числа.

Но если хочется массив, то так:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> list;
    int elem;
    while (std::cin >> elem)
        list.push_back(elem); // Вот тут вместо вставки в массив можно сразу печатать.

    // Как пропускать каждое второе число - сами разберетесь.
    for (int x : list)
        std::cout << x << '\n';
}

Или, более выпендрежное решение:

#include <iostream>
#include <iterator>
#include <vector>

int main()
{
    std::vector<int> list(std::istream_iterator<int>(std::cin), {});

    for (int x : list)
        std::cout << x << '\n';
}

Оба варианта считывают до конца файла. Если хочется остановиться в конце строки, то так:

// #include <sstream>

std::string line;
std::getline(std::cin, line);
std::istringstream ss(line);

// Дальше берете одно из двух решений выше, и меняете там `std::cin` на `ss`.
▲ 1

у меня такая же задача на c++ с сириуса вот как я ее решил:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n, i;
    cin >> n;
    vector<int> v(n);
    for (i = 0; i < n; i++)
    {
        cin >> v[i];
    }
    for (i = 0; i < n; i += 2)
    {
        cout << v[i] << " ";
    }
    return 0;
}

вектор это массив не имеющий границ, можешь задать, можешь и не задавать. в оригинальной задаче вводилось число, показывающее количество элементов в массиве. он идет от 0 элемента до n-1, а не как обычный от 1 до n. Ответ на твой вопрос: "Можно ли создать динамический массив не зная его длину?" - да создать можно, да только программа не знает, когда остановиться, поэтому ей нужен стоп сигнал (грубо говоря), то, что будет завершать ввод чисел в бесконечный массив, называющийся вектор. в моем случае ввод завершается, когда ввели n элементов.

▲ 0

Для этого есть vector и string, но в этой задаче они вообще не нужны:

tio.run

#include <cstdio>

int main()
{
  int x;

  for (unsigned q=0; scanf("%d", &x) == 1; ++q)
    if (!(q&1))
      printf("%d ", x);

  putchar('\n');

  return 0;
}