1

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. 

私の質問は、この時点から構造体のオブジェクトに書き込む方法です。最初にそれらを作成する必要があることは知っていますが、その方法がわかりません。

4

3 に答える 3

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
于 2013-10-15T17:19:45.347 に答える
1

によって配列にオブジェクトを追加できますptr[i] = new items()items** ptrまた、 でデータにアクセスできますptr[i]->member1。ただし、stl コンテナーとスマート ポインターを使用することを強くお勧めします。

于 2013-10-15T17:17:44.410 に答える
0

まず、割り当てステップを完了する必要があります。

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

次に、例を使用して配列にアクセスできます。

ptr[0]->member1=123;
于 2013-10-15T17:18:25.490 に答える