从使用c ++中的new创建的数组中删除一组元素

时间:2016-03-28 14:27:22

标签: c++ pointers

我正在尝试从使用指针p创建的数组中删除最后两个元素,如下所示:

double *p = new double[5];
for(int i=0;i<5;i++)
    cin>>*(p+i);

直到这里工作正常,当我尝试通过偏移指针p然后使用delete以下列方式删除数组中的最后两个元素时

delete [] (p+3)

它会编译但随后崩溃。

是否允许,如果是,那么我哪里出错?

谢谢

1 个答案:

答案 0 :(得分:3)

在本声明中

double *p = new double[5];

分配了一个内存范围。你不能删除它的一部分。

要解决此问题,您需要将旧数组的新数组复制元素分配到新数组中,然后删除旧数组。

例如

double *q = new double[3];

std::copy( p, p + 3, q );

delete [] p;

p = q;

如果可以更改数组的大小,最好使用标准容器std::vector<double>

例如

std::vector<double> v( 5 );

for ( std::vector<double>::size_type i = 0; i < v.size(); i++ )
{
    std::cin >> v[i];
}

//...

v.erase( std::next( v.begin(), 3 ), v.end() );

v.erase( std::prev( v.end(), 2 ), v.end() );