无论如何是否有使用C 11?
进行1D动态和连续数组我将通过stdin
摄入数组的大小,一旦创建它就不需要调整大小。
现在,我正在使用枚举的1D向量,而我最大的性能问题是vector []运算符。
如果在C 中无法完成,我对使用malloc
和C进行操作,请注意delete
的最佳方法。
编辑:没有意识到矢量是白天和日新月异,并发行了。我用-o3重新呼叫格兰格林德,现在问题是ostream不是向量 - 感谢所有让我第二次猜测自己在我不需要时使用阵列重写的人。
int size = 10;
std::unique_ptr<int[]> a(new int[size]);
遵循raii(即阵列被自动毁灭)但是,我认为矢量[]运算符应该是性能问题。在调试汇编中,可以检查它,但是在发行版中不应进行检查。
在MSVC中,具有称为检查迭代器的功能,该功能可能会"杀死"性能。但是,您可以关闭此功能(Google IT)
您始终使用新操作员从堆中动态创建特定类型的连续均匀存储
Type *pType = new Type[size](initial_value)
要删除存储空间,您需要明确调用数组删除操作员
delete[] pType
但是,当您说and my biggest performance issue is the vector [] operator.
时,我怀疑。您是否介绍了代码的零售版本?您怎么知道矢量下标是您的性能瓶颈?
std::vector
有足够的性能在生产中使用。它用于解决编程比赛中的问题。也许,您忘记编译到发行?
另外,您可以使用new
和delete
操作员。
免费分配内存使用free(void *ptr)
功能。
在C中您使用
创建一个1-D数组int *ptr=NULL;
int num_elements = 0;
printf("how many elements?n");
if(scanf("%d", &num_elements)==1) {
ptr = malloc(sizeof(int)*num_elements);
if(ptr == NULL) {
printf("unable to allocate %d elementsn", num_elements);
exit 0;
}
}
完成后,您致电
free(ptr);
确保您只称其为一次!有些人会做
if( ptr != NULL ) {
free(ptr);
ptr = NULL;
}
作为防御性编码 - 防止意外释放两次。
如果您使用的是C ,则使用malloc
可能是一个差的(下)想法。
int length;
cin >> length;
MyType * array = new MyType[length];
然后删除,
delete[] MyType;