2013-10-15 173 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;