0

例如,如果我有一个包含 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++ 新手,所以我不知道任何高级的东西。矢量可以用于此目的吗?我想我在某处读到它在调整大小时占用了以前使用的空间的两倍。这是真的还是可以修改这种行为?

4

2 回答 2

3

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

于 2012-10-02T12:53:43.370 回答
3

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

于 2012-10-02T12:56:21.613 回答