gpt4 book ai didi

c++ - C++删除数组中的元素

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:52 31 4
gpt4 key购买 nike

我已经阅读了其他帖子,但他们没有完全回答我的问题。我正在学习从书中删除数组中的元素并尝试应用该代码。据我所知,我传递的数组是错误的,或者它是通过地址发送整数(不知道这背后的含义)。

#include <iostream>
#include <cstdlib>
using namespace std;

void delete_element(double x[], int& n, int k);

int main()
{
// example of a function
int mass[10]={1,2,3,45,12,87,100,101,999,999};
int len = 10;

for(int i=0;i<10;i++)
{
cout<<mass[i]<<" ";
};

delete_element(mass[10],10&,4);

for(int i=0;i<10;i++)
cout<<mass[i]<<" ";

return 0;
}

void delete_element(double x[], int& n, int k)
{
if(k<1 || k>n)
{
cout<<"Wrong index of k "<<k<<endl;
exit(1); // end program
}

for(int i = k-1;i<n-1;i++)
x[i]=x[i+1];

n--;
}

最佳答案

您的代码中有几个错误。我强调了问题中的一些主要问题 1-3:

  1. 您调用 exit ,它不提供对任何对象的正确清理,因为它是从 C 继承的。这在这个程序中不是什么大问题,但它成为一个问题。

    处理此类错误的一种正确方法是抛出异常
    cout<<"Wrong index of k "<< k <<endl;
    exit(1);

    应该是这样的:
    throw std::runtime_error("invalid index");
    并且应该在其他地方处理。
  2. 您将函数参数声明为采用 int&但是你这样调用函数:delete_element(mass[10],10&,4); 10&正在传递 10地址 .只需传递值 10反而。
  3. 您正在从原始 C 数组中“删除”一个函数。这本质上是没有意义的。您实际上不能删除这样一个数组的一部分。它具有在堆栈上创建的恒定编译时大小。该函数本身不做任何删除,尝试将函数命名为更面向任务的名称。
  4. 您正在使用 C 数组。除非你有充分的理由,否则不要这样做。使用 std::arraystd::vector .这些容器知道它们自己的大小,而 vector 管理它自己的内存并且可以轻松地调整大小。借助容器,您还可以访问 STL 的全部范围,因为它们支持迭代器。

我建议你重写代码,实现某种类型的 STL 容器

关于c++ - C++删除数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36454882/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com