2012-08-02 66 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