2011-02-03 14 views
0

現在、Boost :: ptr_listの要素を前面に移動する方法を理解しようとしています。Boost :: ptr_list要素を前面に移動

私はこのようなものをしようとしている:このバージョンでは、コンパイラacccepts

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

ここでは、リストの最後の要素を前面に移動したいと仮定しています。そうなっている場合は、可能な方法の1つがここにあります。

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()ビットは私が逃した1つのことでした。それが問題を解決します。 – Thilo

+0

うれしい – ds27680

関連する問題