Как выделить память для типа, когда мы не знаем его размер?
Просто простой вопрос Я хочу получить несколько целых чисел и поместить их в массив, но я не знаю его размера, как указано пользователем. Ожидается, что входные данные будут такими: 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 каждый раз, когда приходит новое число (очень неэффективно).