目的:实现一个高效代码实现简单的删除数组中的需要删除的成员的功能代码
代码如下所示:
/* tom 2019-12-06 PM 21:50 */
#include <stdio.h>
typedef int BOOL;
#define TRUE (1)
#define FALSE (0)
typedef struct tagNode
{
BOOL bToDelete;
int iValue;
tagNode(const BOOL bToDelete, const int iValue)
{
this->bToDelete = bToDelete;
this->iValue = iValue;
}
}NODE_ST;
int main()
{
NODE_ST astNode[5] = {
NODE_ST(FALSE, 1),
NODE_ST(TRUE, 2), /* need to delete */
NODE_ST(FALSE, 3),
NODE_ST(TRUE, 4), /* need to delete */
NODE_ST(FALSE, 5)};
int iNodeNum = sizeof(astNode) / sizeof(NODE_ST);
NODE_ST* const pstNodeBgn = astNode;
NODE_ST* pstNodeEnd = astNode + sizeof(astNode) / sizeof(NODE_ST);
NODE_ST* pstNode = NULL;
/* 打印原始数组 */
printf("[%s:%d] dump original list(%d) as follows:\n", __FUNCTION__, __LINE__, iNodeNum);
for (pstNode = pstNodeBgn; pstNode < pstNodeEnd; ++pstNode)
{
printf("[%d.%d] value:%d, needDelete:%s\n", iNodeNum, pstNode - pstNodeBgn, pstNode->iValue, pstNode->bToDelete ? "yes" : "no");
}
/* 删除数组中需要删除的节点 */
for (pstNode = pstNodeBgn; pstNode < pstNodeEnd;)
{
/* 删除需要delete的成员 */
if (pstNode->bToDelete)
{
*pstNode = *--pstNodeEnd;
}
/* next */
else
{
++pstNode;
}
}
/* 更新数组有效长度 */
iNodeNum = pstNodeEnd - pstNodeBgn;
/* 打印最新的数组 */
printf("\n[%s:%d] after delete action, dump list(%d) as follows:\n", __FUNCTION__, __LINE__, iNodeNum);
pstNodeEnd = pstNodeBgn + iNodeNum;
for (pstNode = pstNodeBgn; pstNode < pstNodeEnd; ++pstNode)
{
printf("[%d.%d] value:%d, needDelete:%s\n", iNodeNum, pstNode - pstNodeBgn, pstNode->iValue, pstNode->bToDelete ? "yes" : "no");
}
return 0;
}
程序结果: