2012-12-11 48 views
1

我正在讀取標準輸入中的double,並將其保存到變量d中。我希望能夠做到這一點不確定的時間。我使用下面的代碼爲d創建一個指針。如何在循環C++中創建唯一的指針?

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

然後我把這個指針推入構造的棧(列表)類。但是,每當我推動一個以上的double時,它都會改變它們(指針是相同的)。

Ex。推2並獲得一個數組[2]。按3並獲取數組[3,3]而不是[3,2]。

+5

你爲什麼不只是把在雙打自己? – chris

+1

您正在失去一個指向動態引用內存的指針。餿主意。 – Linuxios

回答

1
*pd = d 

代替

pd = &d; 

你要做的就是:

  • 您對堆棧
  • 您共創雙並保存其指針在double d變量pd變量
  • 那麼你將地址保存到d vari能夠PD
  • ,然後你從pd名錄

保存地址這意味着你必須地址列表變量d(名單上的每一個對象是指向d變量)。

+2

當然你的意思是'* pd = d' – Chad

+0

是的,謝謝;)編輯。 – Yester

+0

或者你可以做double * pd = new double(d);'更好,'whateverStack.push(d);'。 – chris

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)); 
+0

您也可以使用'istream_iterator'初始化矢量以獲得相同的效果。 – chris