Как выделить память для типа, когда мы не знаем его размер?

Просто простой вопрос Я хочу получить несколько целых чисел и поместить их в массив, но я не знаю его размера, как указано пользователем. Ожидается, что входные данные будут такими: 1 2 3 4 5

#include <iostream>
using namespace std;
int main()
{
    int *contain;
    int y;
    int i=0;
    char c;

    while(true)
    {
        cin>>contain[i];
        i++;
        c=getchar();
        if(c=='\n')
        break;
    }
}

2 ответа

Использование std::vector с std::istream_iterator, Таким образом, вам не нужно знать размер заранее.

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;

int main() {
    // Input
    vector<int> data(istream_iterator<int>(cin), {});

    // Output
    for (auto i : data)
        cout << i << endl;

    // Output 2: suggested by alfC
    copy(data.begin(), data.end(), ostream_iterator<int>(cout, " "));
    return 0;
}

вход

1 2 3 4 5

Выход

1
2
3
4
5
1 2 3 4 5

Посмотрите, как это работает в Ideone

Использование std::vector,

Демонстрационный пример для начала, который будет читать числа и сохранять их в vecotr, пока не будет прочитано 0 (это будет сохранено и в векторе):

#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;
  int myint;

  std::cout << "Please enter some integers (enter 0 to end):\n";

  do {
    std::cin >> myint;
    myvector.push_back (myint);
  } while (myint);

  std::cout << "myvector stores " << int(myvector.size()) << " numbers.\n";

  return 0;
}

Выход:

Please enter some integers (enter 0 to end):
1 2 3 4 5 0
myvector stores 6 numbers.

В вашем C-подобном коде вам нужно будет использовать realloc() например, и увеличивайте размер на 1 каждый раз, когда приходит новое число (очень неэффективно).

Другие вопросы по тегам