doc_clone_from.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 75 行

CPP
75
字号
///////////////////////////////////////////////////////////////////////////////// (C) Copyright Ion Gaztanaga  2006-2007//// Distributed under the Boost Software License, Version 1.0.//    (See accompanying file LICENSE_1_0.txt or copy at//          http://www.boost.org/LICENSE_1_0.txt)//// See http://www.boost.org/libs/intrusive for documentation./////////////////////////////////////////////////////////////////////////////////[doc_clone_from#include <boost/intrusive/list.hpp>#include <iostream>#include <vector>using namespace boost::intrusive;//A class that can be inserted in an intrusive listclass my_class : public list_base_hook<>{   public:   friend bool operator==(const my_class &a, const my_class &b)   {  return a.int_ == b.int_;   }   int int_;   //...};//Definition of the intrusive listtypedef list<my_class> my_class_list;//Cloner object functionstruct new_cloner{   my_class *operator()(const my_class &clone_this)   {  return new my_class(clone_this);  }};//The disposer object functionstruct delete_disposer{   void operator()(my_class *delete_this)   {  delete delete_this;  }};int main(){   const int MaxElem = 100;   std::vector<my_class> nodes(MaxElem);   //Fill all the nodes and insert them in the list   my_class_list list;   for(int i = 0; i < MaxElem; ++i) nodes[i].int_ = i;   list.insert(list.end(), nodes.begin(), nodes.end());   //Now clone "list" using "new" and "delete" object functions   my_class_list cloned_list;   cloned_list.clone_from(list, new_cloner(), delete_disposer());   //Test that both are equal   if(cloned_list != list)      std::cout << "Both lists are different" << std::endl;   else      std::cout << "Both lists are equal" << std::endl;   //Don't forget to free the memory from the second list   cloned_list.clear_and_dispose(delete_disposer());   return 0;}//]

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?