C++数组中插入元素。

简介: C++数组中插入元素。

问题:

在已经排序的数组中插入一个数,插入后的数组仍是有序的。

为了简化问题,将顺序规定为升序数组类型为double。

插入函数的代码如下:

 

//将data插入到数组arr中,使插入后仍是升序。
void insert(double data,double arr[],int len)
{
  for (int i = 0; i < len; ++i)
  {
    if (data<arr[i])
    {
      len ++;
      double *arr_t = new double [len];
      for (int j = len-1; j >i; --j)
        arr_t[j] = arr[j-1]; //后移
      arr_t[i] = data; //插入
      for (int k = 0; k< i; ++k)
        arr_t[k] = arr[k];
 
      delete []arr;
      arr = new double[len];
      for(int index = 0;index <len;++index)
        arr[index] = arr_t[index];
      delete [] arr_t;
      break;
    }
  }
}

.遍历数组,(0到len-1),

 遇到第一个比data大的数arr[i] 就将data插入到这个位置i.

 插入的方法:

 由于多了一个数,原来的数组大小应该+1才能装下这些数。

 所以数组长度 len++;由于长度变化了,数组也就变了。于是用arr_t 来 new 一个新的数组。

 将第i个元素以及i后面的元素向后移,将data插入到i位置。然后将i之前的元素复制到arr_t数组中,

 此时得到了插入了data后的数组arr_t。

 再将arr_t 深复制到原来的数组arr中即可。


然而这个方法有问题,当data>=arr[len-1]时,即arr数组中没有比dada大的数时,上面的方法就没法处理了。

于是对这种情况进行处理。

这种情况不需要后移,只要将data放在最后就可以。

void insert(double data, double arr[], int len)
{
  if (data >= arr[len - 1])
  {
    len++;
    double *arr_t = new double[len];
    arr_t[len - 1] = data;
    for (int m = 0; m < len - 1; m++)
      arr_t[m] = arr[m];
 
    //深复制arr_t到arr中
    delete[]arr;
    arr = new double[len];
    for (int index = 0; index <len; ++index)
      arr[index] = arr_t[index];
    delete[] arr_t;
    return;
  }
  for (int i = 0; i < len; ++i)
  {
    if (data<arr[i] )
    {
      len++;
      double *arr_t = new double[len];
      for (int j = len - 1; j >i; --j)
        arr_t[j] = arr[j - 1]; //后移
      arr_t[i] = data; //插入
      for (int k = 0; k< i; ++k)
        arr_t[k] = arr[k];
 
      //深复制arr_t到arr中
      delete[]arr;
      arr = new double[len];
      for (int index = 0; index <len; ++index)
        arr[index] = arr_t[index];
      delete[] arr_t;
      break;
    }
  }
}
相关文章
|
3月前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
101 4
|
3月前
|
C++
C++(十一)对象数组
本文介绍了C++中对象数组的使用方法及其注意事项。通过示例展示了如何定义和初始化对象数组,并解释了栈对象数组与堆对象数组在初始化时的区别。重点强调了构造器设计时应考虑无参构造器的重要性,以及在需要进一步初始化的情况下采用二段式初始化策略的应用场景。
|
4月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
47 4
|
4月前
|
C++ 索引
C++数组、vector求最大值最小值及其下标
C++数组、vector求最大值最小值及其下标
163 0
|
5月前
|
C++ 索引 运维
开发与运维数组问题之在C++中数组名和指针是等价如何解决
开发与运维数组问题之在C++中数组名和指针是等价如何解决
39 6
|
5月前
|
存储 安全 C++
开发与运维数组问题之声明一个数组如何解决
开发与运维数组问题之声明一个数组如何解决
47 6
|
5月前
|
存储 C++ 容器
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
开发与运维数组问题之C++标准库中提供数据容器作为数组的替代如何解决
63 5
|
4月前
|
安全 编译器 C语言
C++入门-数组
C++入门-数组
|
5月前
|
vr&ar C++
1695. 删除子数组的最大得分(C++,滑动窗口)
1695. 删除子数组的最大得分(C++,滑动窗口)
|
5月前
|
安全 编译器 C++
【C++】string类的使用②(元素获取Element access)
```markdown 探索C++ `string`方法:`clear()`保持容量不变使字符串变空;`empty()`检查长度是否为0;C++11的`shrink_to_fit()`尝试减少容量。`operator[]`和`at()`安全访问元素,越界时`at()`抛异常。`back()`和`front()`分别访问首尾元素。了解这些,轻松操作字符串!💡 ```