Boost :: ptr_list Переместить элемент вперед - PullRequest
0 голосов
/ 03 февраля 2011

В настоящее время я пытаюсь понять, как переместить элемент в Boost :: ptr_list на передний план.

Я пытался что-то вроде этого:

boost::ptr_list<myObj> mylist;
boost::ptr_list<myObj> myiter;
// Do something useful
mylist.transfer(mylist.begin(), myiter, mylist);

Эта версия компиляторапринимает, но моя программа падает при первом вызове для передачи.

Еще одна вещь, которую я попробовал, была

mylist.push_front(mylist.release(myiter));

Это компилятор отклоняет из-за несовместимых типов.

Что такоеЯ делаю не так?Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 03 февраля 2011

Я предполагаю, что здесь вы хотите переместить последний элемент в списке вперед.Если это так, вот один из возможных способов сделать это:

struct myObj 
{
    myObj( int i ) : m_i(i)
    {

    }

    void print() const
    {
        std::cout << "i == " << m_i << std::endl;
    }

private:

    int m_i;
};

typedef boost::ptr_list<myObj> tMyList;

void PrintList( const tMyList& list )
{
    std::cout << "List contains: " << std::endl;

    tMyList::const_iterator itEnd = list.end();
    for (tMyList::const_iterator it = list.begin(); it != itEnd; ++it )
    {
        it->print();
    }
}

void test()
{
    tMyList mylist;

    mylist.push_back(new myObj(1));
    mylist.push_back(new myObj(2));
    mylist.push_back(new myObj(3));

    PrintList(mylist);

    //move last element to the front
    tMyList::auto_type pBack = mylist.pop_back();
    mylist.push_front( pBack.release() );

    PrintList(mylist);
}

int main() 
{ 
    test();
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...