c++ delete last element of dynamic array(C++删除动态数组的最后一个元素)
本文介绍了C++删除动态数组的最后一个元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在C++中,我获取了n个元素的动态数组
int* a = new int[n];
在将数组所有元素左移后,最后一个元素,即a[n-1]是无用的,我想删除它。
右移后,我需要删除数组的第一个元素,并有一个指向第二个元素的指针,即我需要创建一个长度为n-1的数组。
我如何才能做到这一点?
推荐答案
您需要分配一个新数组,并将原始数组的元素复制到新数组。
这里是一个演示程序
#include <iostream>
#include <utility>
#include <algorithm>
size_t shift_left( int * &a, size_t n )
{
if ( n )
{
int *p = new int [n-1];
std::copy( a + 1, a + n, p );
std::swap( a, p );
delete []p;
}
return n == 0 ? n : n - 1;
}
size_t shift_right( int * &a, size_t n )
{
if ( n )
{
int *p = new int [n-1];
std::copy( a, a + n - 1, p );
std::swap( a, p );
delete []p;
}
return n == 0 ? n : n - 1;
}
int main()
{
size_t n = 10;
int *a = new int[n] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
for ( const int *p = a; p != a + n; p++ )
{
std::cout << *p << ' ';
}
std::cout << '
';
n = shift_left( a, n );
for ( const int *p = a; p != a + n; p++ )
{
std::cout << *p << ' ';
}
std::cout << '
';
n = shift_right( a, n );
for ( const int *p = a; p != a + n; p++ )
{
std::cout << *p << ' ';
}
std::cout << '
';
delete []a;
return 0;
}
其输出为
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8
您可以通过以下方式更改函数。当传递的n值等于1时,只需释放原始指针并将其设置为nullptr。
例如
size_t shift_left( int * &a, size_t n )
{
if ( n )
{
if ( n == 1 )
{
delete []a;
a = nullptr;
}
else
{
int *p = new int [n-1];
std::copy( a + 1, a + n, p );
std::swap( a, p );
delete []p;
}
}
return n == 0 ? n : n - 1;
}
作为替代方法,您可以使用标准容器std::vector及其成员函数erase。
或者您可以考虑使用std::valarray。
这篇关于C++删除动态数组的最后一个元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:C++删除动态数组的最后一个元素
基础教程推荐
猜你喜欢
- 如何在 C++ 中初始化静态常量成员? 2022-01-01
- 静态库、静态链接动态库和动态链接动态库的 .lib 文件里面是什么? 2021-01-01
- 如何将 std::pair 的排序 std::list 转换为 std::map 2022-01-01
- 我有静态或动态 boost 库吗? 2021-01-01
- 如何通过C程序打开命令提示符Cmd 2022-12-09
- C++结构和函数声明。为什么它不能编译? 2022-11-07
- 在 C++ 中计算滚动/移动平均值 2021-01-01
- 这个宏可以转换成函数吗? 2022-01-01
- 常量变量在标题中不起作用 2021-01-01
- 如何检查GTK+3.0中的小部件类型? 2022-11-30
