1

私はこのようなものを持っています:

typedef int customType[10];

そして、私はこのような機能が欲しい

std::vector<customType*>& myFunc();

しかし、いくつかの問題があります。

1)ベクター内のすべてのポインターにメモリを割り当てる必要がありますcustomType(そうですか?)そして、

std::vector<customType*> A;
//some code to get length
for (i = 0; i < length; i++)
{
  A[i]  = new customType;
}

エラーのために間違っています:

IntelliSense: a value of type "int *" cannot be assigned to an entity of type "customType*"

2)一般的に、そのようなデータを保存するのは良い方法ですか?たぶん、すべてを1行に格納して1次元の配列を作成し、次のようなものを使用する必要があります

A[i*innerLength+j]

要素にアクセスするには?

4

2 に答える 2

2

A[i]is 型でint (*)[10]newがtype であるため、コードは機能しません。配列をint*変更Aするstd::vector<int*>か、クラスまたは構造体でラップします。

struct customType {
    int data[10];
};

次に、std::vector<customType>(できれば)またはのいずれかを使用できますstd::vector<customType*>

std::vector<int[10]>の要件である C および C++ の配列は割り当て可能ではないため、機能しませんstd::vector

于 2012-06-30T19:24:08.893 に答える
1

私は通常、以下のようなものを使用して、自分で配列のインデックスを作成することをお勧めします。

std::vector<int> vals(row_size*col_size, 0);

非常に大きなサイズの場合は、分割した方がよい場合があります。ブロックに割り当てるのは、大量の連続したメモリです。「本当に大きい」というのはかなり主観的なものであり、ほとんどの人が予想するよりもはるかに大きなサイズで済む可能性があります。問題が発生した場合は、プロファイラーに知らせてください。

C++11 にアクセスできる場合、これは別のオプションになります。

TEST(array)
{
    typedef std::array<int,10> Foo;
    typedef std::vector<Foo> Foos;
    Foos foos(10, Foo());
}
于 2012-06-30T19:29:51.357 に答える