1

我正在double从标准输入中读取 a 并将其保存到变量d中。我希望能够执行此操作的次数不详。我使用以下代码创建指向d.

double *pd = new double;
pd = &d;

然后,我将此指针推送到构造的堆栈(列表)类中。但是,每当我推动超过一个双倍时,它都会改变所有这些(指针是相同的)。

前任。push 2 得到一个数组[2]。push 3 并得到数组 [3, 3] 而不是 [3, 2]。

4

2 回答 2

7

你为什么要使用指针?

std::vector<double> v;

double d;
while (std::cin >> d)
    v.push_back(d);

或者正如克里斯指出的那样:

std::copy(std::istream_iterator<double>(std::cin),
          std::istream_iterator<double>(),
          std::back_inserter(v));
于 2012-12-11T23:56:00.127 回答
1
*pd = d

代替

pd = &d;

你要做的是:

  • double d在堆栈上有变量
  • 您创建 double 并将其指针保存在pd变量中
  • 然后将地址保存到 pd 中的 d 变量
  • 然后你从pd列表中保存地址

这意味着您有变量地址列表d(列表中的每个对象都是指向d变量的指针)。

于 2012-12-11T23:50:13.867 回答