2013-10-15 218 views
1

我想写一个指针数组结构在C++中。我的主要目标是能够动态地添加指向数组的指针。我遇到了合成器的问题使用结构和指针数组C++

struct items 
    { 
    int member1; 
    int member2; 
    }; 

    int N=5; 
    items **ptr=new item *[N]; // This is a ptr to an array of ptr's. Each ptr 
          // in this array needs to point to an items struct. 

我的问题是如何在这个结构的对象上写入对象。我知道我需要先创建它们,但我不知道如何做到这一点。

+3

理想的解决方案可能是一个'的std ::矢量'或'STD: :vector >'。 – chris

回答

3

你只分配的item *指针数组,你需要分配的内存每个item也,如:

struct item // naming it 'items' might be confusing, and was used inconsistently 
      // in your code sample 
{ 
    int member1; 
    int member2; 
}; 

int N=5; 
item **ptr=new item *[N]; 

for(int i = 0; i < N; ++i) 
{ 
    ptr[i] = new item(); 
} 

访问您的结构成员如下:

ptr[2]->member1 = 42; // Sets member1 of the 3rd item element to 42 

注意,你需要在某个地方释放分配的内存如下:

for(int i = 0; i < N; ++i) 
{ 
    delete ptr[i]; 
} 
delete [] ptr; 

我一般用于你会更好使用C++标准的容器,如:

#include <vector> 

int N = 5; 
std::vector<item> myItems; 
myItems.resize(N,item()); 

myItems[2].member1 = 42; // Sets member1 of the 3rd item element to 42 

这将为您在内部完成所有内存管理。
如果您使用,并在所有使用std::array不需要动态大小的数组,你甚至能够避免堆分配的内存:

#include <array> 

std::array<item,5> myItems; // Size is fixed to 5, you can't use a variable here 

myItems[2].member1 = 42; // Sets member1 of the 3rd item element to 42 
+0

它的工作。使用矢量而不是我所做的优点是什么?我是C++的新手,尚未研究矢量。 –

+0

而且,你写道访问结构成员是用:ptr [2] - > member1 = 42 ;.它的等值是什么?例如:*(ptr [2]).id? –

+0

不知道你的意思是什么_'什么是它的等价物',但我会说'*(ptr [2])。member1'(没有任何字段id引入任何地方)。关于使用标准容器的优点,清楚地写在答案中。 –

1

您可以通过ptr[i] = new items()将对象添加到您的阵列。您可以通过ptr[i]->member1访问items** ptr中的数据。但我强烈建议使用stl容器和智能指针。

0

首先,您必须完成分配步骤。

for(int i=0;i<N;i++) 
    ptr[i]=new items; 

然后你就可以使用例如访问数组:

ptr[0]->member1=123;