目前我正在尝试了解如何将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));
由于类型不兼容,编译器拒绝此操作。
我做错了什么?谢谢你的帮助。
答案 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;
}