if-case가 사실 인 이유는 무엇입니까?set가 비어있을 때 find가 end()와는 다른 결과를 반환하는 이유를 이해할 수 있도록 도와주세요.
typedef std::set< boost::shared_ptr<CCall>, HasFirstQueuedLongerTime> queued_container;
queued_container::iterator itTemp = queued.find(spCall);
queued_container::iterator itTempEnd = queued.end();
if(itTemp != itTempEnd) //<-- is true
queued
빈 std::set
이며, spCall
는 객체에 대한 공유 포인터입니다. queued
이 비어 있기 때문에 찾기 함수는 queued.end()
...
와 동일한 반복기를 반환해야합니다. vs2005에서 Im 컴파일 및 디버깅. itTemp
과 itTempEnd
이 같은 주소를 가리키고 있습니다.
모든 대답에 감사드립니다!
더 코드 정보는 다음 이전에 선언 된 경우 문 :
queued_container queuedCalls;
const boost::shared_ptr<CCall> &spCall; //spCall is valid according to debug info.
struct HasFirstQueuedLongerTime : std::binary_function < boost::shared_ptr<CCall>, boost::shared_ptr<CCall>, bool> {
bool operator() (const boost::shared_ptr<CCall>& lhs, const boost::shared_ptr<CCall>& rhs) const
{
return lhs->CreatedTime() < rhs->CreatedTime(); //returns true if lhs queued longer time than rhs
}
};
내 실제 실행 코드 :
queued_container::iterator itTemp = queued.find(spCall);
queued_container::iterator itTempEnd = queued.end();
if(itTemp != itTempEnd)
AS_ERROR(1, "XXX", "ERROR: Already added to queue container.");
queued.insert(spCall);
CCallQueue::insert(spCall);
시. 죄송합니다. 많은 수정 사항이 있습니다.
제목이 매우 모호합니다. 나는'find'가 빈 세트에서 실패 할 것으로 기대합니다. 그러나 그것은 "반복자를 콜렉션의 끝으로 되돌려줍니다"에서 "실패"합니다. – MSalters
@ user521048 : 실제 자체 테스트 케이스를 생성합니다. 위의 내용은 문제를 진단하기에 충분한 정보를 제공하지 않습니다. – wilx
답변 해 주셔서 감사합니다. 이것에 대해 아는 것이 재미 있을지 말해주세요. – user521048