2012-08-02 83 views
0

我對C++ vector感到困惑並尋求幫助。 我聲明一個類CBoundaryPoint矢量值與原始值不同

class CBoundaryPoint: 
{ 
public: 
    double m_param; 
    int m_index;  
} 

然後我定義了一個vector

vector<CBoundaryPoint> vBoundPoints; 
CBoundaryPoint bp; 
double param; 
// other codes 
bp.m_param = param; 
vBoundPoints.push_back(bp); 

我很驚訝於vBoundPoints每個元素的m_param值是從給定的值PARAM完全不同。我只是不知道爲什麼。

例如:

param = 0.3356; 
bp.m_param = param; // so bp.param equals to 0.3356; 
vBoundPoints.push_back(bp); // while (*(vBoundPoints.end()-1)).m_param = -6.22774385622041925e+066; same case to other elements 

到底發生了什麼,爲什麼?我正在使用VS2010。

+0

您可以加入一些代碼來告訴你如何檢查值? – juanchopanza 2012-08-02 14:25:38

+0

是的,你想可能使用.rbegin()或更好.back()而不是.end() - 1 – vmpstr 2012-08-02 14:28:30

+1

請給出一個簡短的,完整的代碼示例來演示問題。 – 2012-08-02 14:28:48

回答

1

當您調整矢量大小或使用size_type構造函數創建特定大小的矢量時,您可能會得到垃圾。你在你的向量中獲得默認構造的對象,並且這些對象包含原始類型。由於您沒有用戶定義的默認構造函數,因此這些值本質上是隨機的,或者是「垃圾」。

您可以通過添加默認的構造函數到類解決這個問題:

class CBoundaryPoint: 
{ 
public: 
    CBoundaryPoint : m_param(), m_index() {} // initializes members to 0. and 0 
    double m_param; 
    int m_index;  
} 
+0

非常感謝!它確實有用! – tlanyan 2012-08-03 02:30:14