33-1.cpp

来自「effective stl 源代码 code」· C++ 代码 · 共 63 行

CPP
63
字号
//
// Example from Item 33
//

#include <iostream>
#include <vector>

#include "ESTLUtil.h"
#include "Widget.h"
#include "smart_ptr.h"
using namespace std;
using namespace ESTLUtils;

int data[] = { -30, 102, 55, -19, 0, 222, -3000, 4000, 8, -2 };
const int numValues = sizeof data / sizeof(int);
const int SOME_MAGIC_NUMBER = 10;

void delAndNullifyUncertified(Widget*& pWidget) 	// if *pWidget is an
{													// uncertified Widget,
	if (!pWidget->isCertified()) {					// delete the pointer
		delete pWidget;								// and set it to null
		pWidget = 0;
	}
}

int main()
{
	using namespace std;
	using namespace ESTLUtils;
	using namespace boost;

	vector<Widget*> v;					// create a vector and fill it with
										// pointers to dynamically 
	v.push_back(new Widget);			// allocated Widgets
	v.push_back(new Widget(10));
	v.push_back(new Widget(9));
	v.push_back(new Widget(99));
	v.push_back(new Widget(102));
	
	printContainer("v before erase", v);


/*
	v.erase(remove_if(	v.begin(), v.end(),		// erase the pointers to
		not1(mem_fun(&Widget::isCertified))),	// uncertified Widgets;
		v.end());								// see Item 41 for info
*/
	for_each(v.begin(), v.end(),					// delete and set to
		delAndNullifyUncertified);					// null all ptrs to 
													// uncertified widgets

	v.erase(remove(v.begin(), v.end(), static_cast<Widget *>(0)), v.end());	// eliminate all null
													// ptrs from v


	printContainer("v after erase", v);

	//////////////////////////////////////////////////////////////////////

#define RCSP shared_ptr
	
	{
	typedef RCSP<Widget> RCSPW;		// RCSPW = 揜CSP to Widget

⌨️ 快捷键说明

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