2010-04-15 28 views
0

我有以下代碼:舊矢量被清除了嗎?如果是,如何以及何時?

void foo() 
{ 
    vector<double> v(100,1);  // line 1 
    // some code 
    v = vector<double>(200,2);  // line 2 
    // some code 
} 

什麼第二行之後發生的大小爲100的載體?它被自己清除了嗎?如果答案是肯定的,那麼何時何地被清除?順便說一句,有沒有其他「簡單而乾淨」的方法來改變向量,如第2行?我不想要像

v.resize(200); 
for (int i=0; i<200; i++) v[i] = 2; 

另一個問題。如果該載體是一個類的成員:

class A{ 
public: 
    vector<double> data; 

    A(int size, double value) 
    { 
     data = vector<double>(size,value); 
    } 
}; 

A object(10,1); 
// some code 
object = A(20,2);  // ** What happened to the old object.data? ** 
// some code 
+0

我在哪裏可以找到操作矢量的MSDN中的描述=? – 8888q8888 2010-04-15 03:33:27

+0

MSDN沒有定義語言。 [本網站](http://www.cplusplus.com/reference/)都沒有,但它應該有點更豐富。 [對於矢量運算符=](http://www.cplusplus.com/reference/stl/vector/operator=/)。 – GManNickG 2010-04-15 03:37:42

+0

謝謝!我知道了!對於重複的問題抱歉。 – 8888q8888 2010-04-15 03:44:42

回答

4

在分配中,首先創建一個臨時矢量對象包含該元件2 200倍。然後將此臨時對象分配給v:矢量v刪除其當前包含的所有元素,並複製臨時矢量對象的內容。聲明結束時,臨時矢量對象再次被銷燬。

爲了更簡潔地做到這一點,而無需創建一個臨時的對象,你可以使用assign()方法:

v.assign(200, 2); 
+0

這是我正在尋找的正確答案!謝謝。 – 8888q8888 2010-04-15 03:31:27

相關問題