c++ - 来自 vector 的值与原始值不同

标签 c++ vector push-back

我对 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。

最佳答案

当您调整 vector 大小或使用 size_type 构造函数创建特定大小的 vector 时,您可能会得到垃圾。您在 vector 中获得默认构造的对象,这些对象包含原始类型。由于您没有用户定义的默认构造函数,因此这些值基本上是随机的,或者说是“垃圾”。

您可以通过向您的类添加默认构造函数来解决此问题:

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

关于c++ - 来自 vector 的值与原始值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11779486/

相关文章:

c++ - 通过重新排序优化分支

按属性对对象 vector 进行排序的 C++ 模板

c++ - 指针 vector 的 Push_back 方法导致 C++ 崩溃

C++ Push_back vector<struct>MyVector 和错误 C2664

c++ - 指向具有 vector 内存泄漏的对象的指针

c++ - vector 错误,无法使 push_back 工作

c++ - 如何在 Mac 上使用 C++ 停止正在运行的并行线程?

c++ - GDI绘制的MFC的CScrollView如何实现缩放

c++ - 当我的数组达到一定大小时 Qt 不工作

c++ - 如何在不丢失现有数据的情况下调整 std::vector 的大小?