Boost :: ptr_list将元素移动到前面

时间:2011-02-03 10:05:15

标签: c++ boost

目前我正在尝试了解如何将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 :(得分:0)

我假设你想把列表中的最后一个元素移到前面。如果是这样,有一种可行的方法:

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