달력

122018  이전 다음

  •  
  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
  •  
개인적으로 STL Container를 이용한 동적할당을 자주 사용하는 편이다.

데이터의 수정과 복사등에 편리하기 때문이다.

그러나 삭제시 매번 Loop를 돌아서 참 귀찮았다..

그래서 그 항목들을 모아봤다.

// 이렇게 삭제 대상을 모아놓고...
typedef struct _rmv_stl_inst{
public:
_rmv_stl_inst(void){}
void operator() (LP_TMA_OWNSHIP_INFO& _val) { delete _val; }
void operator() (LP_TMA_TRACKING_INFO& _val) { delete _val; }
}_RMV_STL_INST;

// 이렇게 호출해 버린다...
std::for_each( m_vecOwnshipHistory.begin(), m_vecOwnshipHistory.end(), _RMV_STL_INST() );


혹은.. 
class U2INTERFACEDll _AGRTM_RMV_STL_INSTANCE{
public:
_AGRTM_RMV_STL_INSTANCE(void){}
void operator() (LP_TIF_TRACKING_INFO& _val) { delete _val; } // TrackingInfo
void operator() (LP_TIF_SENSOR_INFO& _val) { delete _val; } // SensorInfo
void operator() (LP_TIF_OWNSHIP_INFO& _val) { delete _val; } // OwnshipInfo
void operator() (LP_TIF_TGT_DROP_INFO& _val) { delete _val; } // Tartget DropInfo

void operator() (LP_RCV_SCANSET_STC& _val) { delete _val; } // ScanSet
void operator() (LP_RCV_SCANSET_DYN& _val) { delete _val; } // ScanSet
void operator() (LP_TRACKING_SCANSET& _val) { delete _val; } // ScanSet
};

이렇게 선언해 놓고... 사용하기도 하고..
std::for_each(
m_vecOwnshipHistory.begin(),
m_vecOwnshipHistory.end(), 
_AGRTM_RMV_STL_INSTANCE()
);

 아예 람다를 쓰기도 한다.
 if( m_vecTrackingHistory.empty() == false ){
std::for_each( 
m_vecTrackingHistory.begin(), 
m_vecTrackingHistory.end(), 
[](LP_TMA_TRACKING_INFO& _val){ delete _val; }
);
m_vecTrackingHistory.clear();
}

Posted by 촌돌애비

댓글을 달아 주세요


 // 람다정의
 auto fnLambdaFind = [&nData]( std::map<UINT, INT>::value_type const& itr )->bool{ 
   return nData == itr.second ? true : false;
 };

 // 입력한 nData에 해당하는 것을 map에서 찾기 찾기
 std::map<UINT, INT>::iterator it = std::find( m_mapData.begin(), m_mapData.end(), fnLambdaFind);

Posted by 촌돌애비

댓글을 달아 주세요