doc_erasing_and_disposing.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 71 行
CPP
71 行
///////////////////////////////////////////////////////////////////////////////// (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_erasing_and_disposing#include <boost/intrusive/list.hpp>using namespace boost::intrusive;//A class that can be inserted in an intrusive listclass my_class : public list_base_hook<>{ public: my_class(int i) : int_(i) {} int int_; //...};//Definition of the intrusive listtypedef list<my_class> my_class_list;//The predicate functionstruct is_even{ bool operator()(const my_class &c) const { return 0 == (c.int_ % 2); }};//The disposer object functionstruct delete_disposer{ void operator()(my_class *delete_this) { delete delete_this; }};int main(){ const int MaxElem = 100; //Fill all the nodes and insert them in the list my_class_list list; try{ //Insert new objects in the container for(int i = 0; i < MaxElem; ++i) list.push_back(*new my_class(i)); //Now use remove_and_dispose_if to erase and delete the objects list.remove_and_dispose_if(is_even(), delete_disposer()); } catch(...){ //If something throws, make sure that all the memory is freed list.clear_and_dispose(delete_disposer()); throw; } //Dispose remaining elements list.erase_and_dispose(list.begin(), list.end(), delete_disposer()); return 0;}//]
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?