STL Vector的排序以及元素刪除

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

typedef struct _WinHandleInfo
{
	int posId;

	_WinHandleInfo(int id)
	{
		posId = id;
	}

	bool operator==(_WinHandleInfo *p_stOther)
	{
		return posId == p_stOther->posId;
	}

}WinHandleInfo;

static bool SortFun(WinHandleInfo *pHandle1, WinHandleInfo *pHandle2)
{
	return pHandle1->posId < pHandle2->posId;
}

vector<WinHandleInfo*> m_idleWinHandleVec;

void SortIdleWinHandle()
{
	std::sort(m_idleWinHandleVec.begin(), m_idleWinHandleVec.end(), SortFun);
}

int main()
{
	WinHandleInfo *info1 = new WinHandleInfo(5);
	m_idleWinHandleVec.push_back(info1);

	WinHandleInfo *info2 = new WinHandleInfo(4);
	m_idleWinHandleVec.push_back(info2);

	WinHandleInfo *info3 = new WinHandleInfo(3);
	m_idleWinHandleVec.push_back(info3);

	WinHandleInfo *info4 = new WinHandleInfo(2);
	m_idleWinHandleVec.push_back(info4);

	WinHandleInfo *info5 = new WinHandleInfo(1);
	m_idleWinHandleVec.push_back(info5);

	
	for (auto info = m_idleWinHandleVec.begin();info!=m_idleWinHandleVec.end();info++)
	{
		printf("%d  ",(*info)->posId);
	}

	printf("\r\n====================\r\n");


	SortIdleWinHandle();

	for (auto info = m_idleWinHandleVec.begin();info!=m_idleWinHandleVec.end();info++)
	{
		printf("%d  ",(*info)->posId);
	}

	printf("\r\n====================\r\n");

	remove(m_idleWinHandleVec.begin(),m_idleWinHandleVec.end(),info4);

	for (auto info = m_idleWinHandleVec.begin();info!=m_idleWinHandleVec.end();info++)
	{
		printf("%d  ",(*info)->posId);
	}
	printf("\nremove size:%d\n",m_idleWinHandleVec.size());

	printf("\r\n====================\r\n");

	m_idleWinHandleVec.erase(remove(m_idleWinHandleVec.begin(),m_idleWinHandleVec.end(),info5),m_idleWinHandleVec.end());

	for (auto info = m_idleWinHandleVec.begin();info!=m_idleWinHandleVec.end();info++)
	{
		printf("%d  ",(*info)->posId);
	}

	printf("size:%d\n",m_idleWinHandleVec.size());

	system("pause");
	
	return 0;
}

結果

關鍵點:

1. sort排序vector

2. vector remove函數,只會把後面的元素向前移動,相當於向前一位內存覆蓋,最後一個元素的內存還在,vector的元素個數也沒有發生變化

3.earse 結合 remove,做到真正刪除,先移位,再把最後一個元素抹掉

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