c++ - 如何从具有指针的结构数组中删除元素?

标签 c++ c arrays data-structures

这是我的结构,它有两个整数指针 aV 和 aT。

struct ADJP
{
    int *aV;
    int eV;
    int nV;
    int *aT;
    int nT;
};
ADJP *Umb = NULL;

aV和aT的分配过程是这样的..

    for(int i=0; i<nb; i++)
    {
        Umb[i].aV = new int[N];
        for(int j=0; j<n; j++)
            Umb[i].aV[j] = pIn[i].aV[j];
}

我想从 Umb 数组中删除一个特定元素。比如我想去掉Umb[5],那我怎么去掉。我尝试过各种方法,但由于我认为分配的指针而出错。我尝试过使用 follow 方法,但它不适用于这种结构数组。它使用没有指针的结构数组。

int DeleteStructElement(int Index, ADJP *b, int N, int at)
{
    for(int i=Index; i<N-1; i++)
        memmove(&b[i], &b[i+1], (N-at-1)*sizeof*b);     // moving the terms of array
    N--;                                                // updating new size
    return N;
}

知道如何从我的结构数组中删除一个元素吗?

最佳答案

你会想要删除删除元素中的数组以释放它们的内存:

delete[] b[Index].aV;
delete[] b[Index].aT;

然后,您只需执行一次 memmove 操作即可删除该元素。

memmove(&b[Index], &b[Index+1], (N-Index-1) * sizeof(b[Index])

编辑:正如 Mahmoud 指出的那样,这不使用 DeleteStructElement 中的 at 参数;我不确定您打算使用该参数做什么。

关于c++ - 如何从具有指针的结构数组中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127511/

相关文章:

c++ - 有效指针的含义

c++ - 将字符串从 __DATE__ 转换为 time_t

c++ - 浅拷贝有什么问题?

c - 如何在 C 中运行外部程序?

javascript - 从对象数组构建对象的最高效方法

java - 如何有效地对二维数组进行哈希处理(存储在 HashSet 中)?

c++ - 如何忽略参数包参数

c - 在 C 中传递结构

c - 简单的猜谜游戏,允许用户在正确猜出随机数后再次玩?

java - Java 中通过属性对数组进行排序