0

我对结构指针数组的增长有疑问。

指向结构存储内存位置的指针数组。

但我不确定我要存储多少。

我想要数组的动态增长。

我还可能需要删除其中一个元素。

代码如下:</p>

#include <stdio.h>
#include <stdlib.h>

struct dominate * realloct(int* dim_1, struct dominate *dominateList)
{
    int i;
    struct dominate *dominateList_temp = (struct dominate *)malloc(sizeof(struct dominate *)*(*dim_1+10));

    for(i = 0; i < *dim_1+10;i++)
    {
        if(i<*dim_1)
        {
            dominateList_temp[i] = dominateList[i];
            //memcpy(b[i], a[i], (long)(sizeof(int)*(*dim_1)));
        }
        else
            dominateList_temp[i] = (struct dominate *)malloc(sizeof(struct dominate *)*dim_1);
    }
    (*dim_1) = (*dim_1)+10;

    return dominateList_temp;
}

struct dominate
{
    double ID;
};

struct dominate *head;

int main()
{
    int i;
    struct dominate *dominateList;
    struct dominate *dominateList_temp;
    int dim_1 = 10;

    struct dominate *z[100];

    for(i = 0; i < 100; i++){
        head = (struct dominate *) malloc(sizeof(struct dominate *));
        head->ID = i;
        z[i] = head;
    }


    dominateList = (struct dominate *)malloc(sizeof(struct dominate *)*dim_1);

    for(i = 0; i < 100; i++){
        if(i == dim_1 )
        {
            dominateList_temp = realloct(&dim_1, dominateList);
            free(dominateList);
            dominateList = dominateList_temp;
        }
    }

    printf("%d \n\n", dim_1);

    for(i = 0; i < 100; i++){
        printf("%.2lf ", dominateList[i].ID);
        printf("\n");
    }   
    return 0;
}

我不知道如何修改这个问题

if(i<*dim_1){
    dominateList_temp[i] = dominateList[i];
    //memcpy(dominateList_temp[i], dominateList[i], (long)(sizeof(struct dominate *)*dim_1);
}
else
    dominateList_temp[i] = (struct dominate *)malloc(sizeof(struct dominate *)*dim_1);

另外,如果我想删除数组的一个元素,该怎么做呢?

4

2 回答 2

2

在 C++ 中,只需使用std::vector<dominate>:

std::vector<dominate> d1;
d1.push_back(dominate()); // add a default constructed dominate object

std::vector<dominate> d2(100); // construct a vector with 100 default constructed dominate objects
dominate dom = ..... ;
d2[45] = dom; 
于 2012-11-24T08:11:23.050 回答
0

由于您将其标记为 C 和 C++,我将只回答其中一个问题:如果您希望在 C++ 中实现这种行为,则不应自己实现它。所有这些都已经在标准模板库中完成了。只需使用 std::list (如果您要从中间进行大量插入或删除,并接受更长的项目查找时间)或 std::vector (如果您想要快速的项目查找,但接受更长的时间来插入或删除列表中间的项目)。

查看您的代码:

  • 你使用 C,所以你可能把它弄错了。
  • 你要std::list <dominate>
于 2012-11-24T08:13:05.970 回答