我对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 = 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 :(得分:1)
使用size_type
构造函数调整向量大小或创建特定大小的向量时,可能会出现垃圾。您在向量中获得默认构造的对象,并且这些对象包含初始类型。由于您没有用户定义的默认构造函数,因此这些值基本上是随机的,或者是“垃圾”。
您可以通过在类中添加默认构造函数来解决此问题:
class CBoundaryPoint:
{
public:
CBoundaryPoint : m_param(), m_index() {} // initializes members to 0. and 0
double m_param;
int m_index;
}