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

+0

그래, 아마도 .end() 대신에 .rbegin() 또는 더 나은 아직 .back()을 사용하고 싶을 것입니다. - – vmpstr

+1

문제를 나타내는 짧은 코드 예제를 제공하십시오. –

답변

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

관련 문제