删除并移位数组c ++

时间:2015-09-30 21:17:36

标签: c++ arrays

我想从数组中找到特定项目,然后移动数组以删除该项目。我有一个整数列表{1,2,3,4,5,6,7,8,9},并希望删除整数2。

目前我收到一条错误:“new_ints”的存储空间大小未知:

int new_ints[];

不确定这意味着什么或如何解决这个问题?

这是我的代码:

int main() {

  int tmp = 2;
  int valid_ints[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

  int new_ints[];
  new_ints = stripList(tmp, valid_ints);

  for (int i = 0; i < sizeof(new_ints); i++)
    cout << new_ints[i] << endl;

  return 0;
}


int *stripList (int tmp, int valid_ints[]){

  for (int i = 0; i < sizeof(valid_ints); i++){
    for (int j = tmp; j < sizeof(valid_ints); j++){
      valid_ints[j] = valid_ints[j+1];
    }
  }
  return valid_ints;
}

2 个答案:

答案 0 :(得分:1)

c++ array的大小必须在编译时知道。即int new_ints[]是非法的。您需要具有定义的大小,即new_ints[10]。 (有关详细信息,请参阅here)或者更好的是,利用c++的优势并使用std::vector

答案 1 :(得分:1)

与Ben所说的一样,如果您想调整阵列大小以适应新元素,强烈建议使用矢量。

http://www.cplusplus.com/reference/vector/vector/vector/

这是我的例子:(注意你可以使用vector :: erase来删除不需要的元素)

#include <iostream>
#include <vector>

using namespace std;

int main()
{
  vector<int> valid_ints;
  vector<int> new_ints;

  int tmp = 2;

  //read in elements
  for(int i = 1; i <= 9; i++)
  {
    valid_ints.push_back(i);
  }
  //valid_ints will hold {1,2,3,4,5,6,7,8,9}

  for(int i = 0; i < valid_ints.size(); i++)
  {
    //We will add an element to new_ints from valid_ints everytime the valid_ints[i] is NOT tmp. (or 2.)
     if(valid_ints[i] != tmp)
     {

       new_ints.push_back(valid_ints[i]);
     }
  }

  //Print out the new ints
  for(int i = 0; i < new_ints.size(); i++)
  {
    cout << new_ints[i] << ' ';
  }

  return 0;
}

生成的矢量将按以下顺序填充:

{1}

{1,3}(跳过2!)

{1,3,4}

{1,3,4,5}

等......直到

{1,3,4,5,6,7,8,9}

因此,输出结果为:

1 3 4 5 6 7 8 9