我有这样的事情:
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]
访问元素?
答案 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());
}