繁体   English   中英

调整大小并复制C ++数组

[英]Resize and copy of c++ array

例如,如果我有一个包含5个元素的指针数组(已满),并且我想在第二个位置插入另一个元素,则必须分配另一个数组(大小为+1),从旧数组中复制第一个元素,然后插入新元素,然后复制其余元素。 此应用程序不能浪费任何空间。 到目前为止,这是代码:

Sometype **newArray=new Sometype*[++Count];
size_t s=sizeof(Array);
memcpy(newArray,Array,s*position);
newArray[position]=new Sometype();
memcpy(newArray+position+1,Array+position,s*(Count-position-1));

delete [] Array;
Array=newArray;

有没有更有效的方法来执行此操作,因为这是我的应用程序的瓶颈?我是c ++的新手,所以我不知道任何高级知识。 可以将vector用于此目的吗? 我想我在某处读到,调整大小时它占用的空间是以前使用的空间的两倍。 这是真的,还是可以修改此行为?

看看标准容器std::vectorstd::liststd::unordered_setstd::unordered_map

如果您不能浪费任何空间并且必须坚持使用顺序容器,那么恐怕这是最有效的方法。 但是我仍然不相信您不能浪费任何空间。 如果您可以事先预料到以后需要再添加5个元素,那么从一开始就调整数组大小将更加有效。 无论如何,您都应该使用vector来避免这种糟糕的C风格代码,并更加清楚自己的意图。 您可能想看看std::vector<T>::reserve()函数。 调整大小时,向量是否需要比以前大一倍,这在各个实现中都不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM