将元素移动并添加到数组中

时间:2016-12-11 16:16:35

标签: c++ arrays sorting

假设我有一个数组:int list[] = {1, 2, 4, 5, 6}; 我希望将数组从中间向右移动,并将3放在4的位置,这样看起来像:{1, 2, 3, 4, 5, 6}我该怎么做?谢谢。

2 个答案:

答案 0 :(得分:5)

如果您可以使用C ++标准库,那么std::vector是数组的替代品。它有一个专门的方法insert来做你想做的事情:

std::vector<int> v;
... // add elements 1, 2, 4, 5, 6 to it
v.insert(v.begin() + 2, 3); // insert 3 at position 2

如果您知道插入新元素的位置,这很好。但是,您的列表似乎应该始终排序,并且您希望插入新元素以使其保持排序。如果是这样,最好使用std::multiset

std::multiset<int> v;
... // add elements 1, 2, 4, 5, 6 to it
v.insert(3); // insert 3

在这里,您无需知道插入新元素的位置。

答案 1 :(得分:2)

如果你不能使用vector,一个解决方案是:

  • 创建一个空间很大的数组(末尾有几个空位);

    int * array = malloc(sizeof(int) * array_size);

  • 使用两个变量一个来保存数组的大小(让我们称为size)另一个来计算已经添加的元素数量(让我们称之为number_of_elements_in_the_array

在位置'x'处添加元素时,执行以下操作(使用x&lt;数组大小):

int tmp = array[x]; // save the current value
array[x] = new_value; // update with the new value
int tmp2;
number_of_elements_in_the_array++;

// we reach the limited
if(number_of_elements_in_the_array == size)
{
   size = 2 * size; //lets double that size
   int *new_array = malloc(sizeof(int) * size);

   // copy the first elements
   for(int i = 0; i <= x; i++)
      new_array[i] = array[i];

   new_array[x+1] = tmp;

    // copy the last elements
    for(int i = x+1; i < number_of_elements_in_the_array; i++)
       new_array[i+1] = array[i];

  free(array) // free the old space
  array = new_array; // update the new pointer
}    
else
{
    // shift the remaining elements
   for(int i = x+1; i < number_of_elements_in_the_array; i++)
   {
       tmp2 = array[i];
       array[i] = tmp;
       tmp = tmp2;
   } 

}

当你达到限制时,创建一个包含更多内存的新数组,从旧数组复制到新数组,并相应地更新变量number_of_elements_in_the_arraysize

免责声明:我没有测试过,因此它可能是一些小错误,但整体意识形态都存在。