动态和连续的数组



无论如何是否有使用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有足够的性能在生产中使用。它用于解决编程比赛中的问题。也许,您忘记编译到发行?

另外,您可以使用newdelete操作员。

免费分配内存使用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;

相关内容

  • 没有找到相关文章

最新更新