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)通常,存储此类数据是一种好方法吗?也许我应该制作一个一维数组,所有内容都存储在一行中,并使用类似的东西

A[i*innerLength+j]

访问元素?

4

2 回答 2

2

您的代码将不起作用,因为A[i]它是 typeint (*)[10]并且new表达式是 type int*,要么更改Astd::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 回答