std :: vector,带有指向自定义类型的静态数组的指针

时间:2012-06-30 18:53:20

标签: c++ stdvector

我有这样的事情:

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维数组,其中所有内容都存储在一行中并使用类似

的内容

A[i*innerLength+j]

访问元素?

2 个答案:

答案 0 :(得分:2)

您的代码无效,因为A[i]的类型为int (*)[10]new表达式的类型为int*,要么A更改为{{} 1}}或将数组包装在类或结构中:

std::vector<int*>

然后您可以使用struct customType { int data[10]; }; (最好)或std::vector<customType>

std::vector<customType*>无法正常工作,因为C和C ++中的数组不可分配,这是std::vector<int[10]>的要求。

答案 1 :(得分: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());
}