当我们不知道它的大小时,如何为某种类型分配内存?

时间:2017-10-20 05:53:07

标签: c++ arrays io

只是一个简单的问题。 我想收到一些整数并把它放到一个数组中,但我不知道它的大小,因为它是由用户给出的 输入预计如下: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 个答案:

答案 0 :(得分:7)

std::vectorstd::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

答案 1 :(得分:3)

使用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(非常低效)。