2011-02-03 70 views
0

当前我想了解如何将Boost :: ptr_list中的元素移到前面。Boost :: ptr_list将元素移动到前面

我一直在试图像这样的东西:

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

该版本编译器acccepts,但在第一次调用我的程序崩溃转移。

我想另一件事是

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

该编译器拒绝,由于不兼容的类型。

我在做什么错?谢谢你的帮助。

回答

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

谢谢。 auto_type :: release()位是我错过的一件事。解决了这个问题。 – Thilo 2011-02-03 11:41:11