標準容器List的使用

#ifndef __STD_LIST_TEST__
#define __STD_LIST_TEST__
#include <list>
#include <iostream>
using namespace std;
class TestData
{
public:
	TestData()
    {
        m_Num = 0;
    }
public:
    int m_Num;
};
#endif

#include "StdListTest.h"
#define  NUM 10
using namespace std;
#define TESTLIST std::list<TestData*>
int main(int argc, char* argv[])
{
    int m_size = 0;
	std::list<TestData*> m_TestList;
	for (int iTest = 0; iTest < NUM; iTest++)
	{ 
		TestData* m_test = new TestData;
		m_test->m_Num = iTest;
		m_TestList.push_back(m_test);
	}

	cout<<"刪除全部數據\n"<<endl;
	// 可行方法1
	//TESTLIST::iterator m_Iter = m_TestList.begin();
	//while(m_Iter != m_TestList.end())
	//{
	//  TestData* m_Temp =  (m_TestList.front());
	//  delete m_Temp;
	//  m_Temp = NULL;
	//  m_TestList.erase(m_Iter++);
	//}

	// 方法2
	TESTLIST::iterator m_Iter = m_TestList.begin();
	while(m_Iter != m_TestList.end())
	{
		TestData* m_Temp =  (m_TestList.front());
		delete m_Temp;
		m_Temp = NULL;
		m_Iter = m_TestList.erase(m_Iter);
	}

	// 方法一和二均可行的。
	// 如下有問題,因爲迭代器的指針被刪除,++時候會報錯。
	/*
	   TESTLIST::iterator m_Iter = m_TestList.begin();
	   while(m_Iter != m_TestList.end())
	   {
	      m_TestList.erase(m_Iter);
	      //m_Iter++;//地址已被銷燬,而且存在內存泄露
	   }
	*/
	m_size = m_TestList.size();
	
	cout<<"刪除後空間\n"<<m_size<<endl;

	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章