Помогите мне понять, почему find возвращает что-то отличное от end () в std :: set, когда set пуст - PullRequest
0 голосов
/ 09 декабря 2010

почему if-case верен?!

 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 пусто, функция find должна вернуть итератор, равный queued.end() ...

Я собираю и отлаживаю vs2005. Я вижу, что itTemp и itTempEnd указывают на один и тот же адрес.

Благодарен за все ответы!

Дополнительная информация о коде, перед оператором if объявляется следующее:

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);

Ps. Извините за много правок ..

1 Ответ

1 голос
/ 10 декабря 2010

Проблема решена!

itTemp != itTempEnd

никогда не было правдой! Функция ниже AS_ERROR была «# define-function» с несколькими операторами. Таким образом, первое утверждение никогда не выполнялось, а второе было.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...