如何使用c ++删除数组中的某些值

时间:2012-12-05 10:29:35

标签: c++

我有一个系统可以自动读取存储在公司员工访问卡上的信息。这些信息存储在一个数组中。当读卡器不起作用时,员工必须在读卡器附近的键盘上输入他的名字和他的Pin来访问建筑物,并且读卡器将自动创建存储在阵列中的信息。数组的第三个第一个单元格总是用正确的值填充,其余的单元格用0填充。我的工作是访问这个数组并删除第三个元素之后的所有不相关的零,即使它在第三个元素之前存在0第三个要素,必须保留。

我有以下代码:

    #include <iostream>  
    #include <string>      
    using namespace std;  
    int main(){  
      int const Taille=5;  
      int Track2[Taille], i;      
      Track2[0]=1;  
      Track2[1]=0;  
      Track2[2]=3;  
      Track2[3]=0;  
      Track2[4]=0;      
      cout<<"voici le contenu du tableau: \n";  
      for(i=0;i<Taille;i++){  
        if(Track2[i]!=0){  
        cout<<"Track2["<<i<<"]= "<<Track2[i]<<"\n";  
    }  
     }  
    return 0;  
    }  

执行此操作时,我得到以下结果: voici le contenu du tableau:Track2 [0] = 1 Track2 [2] = 3 我希望得到这个结果: voici le contenu du tableau:Track2 [0] = 1 Track2 [1] = 0 Track2 [2] = 3 这意味着,只有在数组的tird元素(此处为Track2 [2])之后必须从我的数组中删除= 0的值。 我该怎么办? 感谢

4 个答案:

答案 0 :(得分:3)

如果您使用C ++,请使用std::vectorstd::vectorerase方法,请使用它。

#include <iostream>
#include <vector>




int main ()
{
  std::vector<int> myvector;

  // set some values (from 1 to 10)
  for (int i=1; i<=10; i++) myvector.push_back(i);

  // erase the 6th element
  myvector.erase (myvector.begin()+5);

  // erase the first 3 elements:
  myvector.erase (myvector.begin(),myvector.begin()+3);

  std::cout << "myvector contains:";
  for (unsigned i=0; i<myvector.size(); ++i)
    std::cout << ' ' << myvector[i];
  std::cout << '\n';

  return 0;
}

sts::vector::erase文档。

答案 1 :(得分:1)

你的程序没有擦除数组的部分,它应该不打印它的最后部分(如果我正在读你的问题)。

为此你可以保留另一个变量,包含最后一个可用的索引,然后循环,直到你到达那个变量。

如果你真的想从阵列中擦除条目,我建议你改用std::vector

答案 2 :(得分:0)

从数组中删除并不容易,因为数组具有固定大小(例如,5),这是在创建数组时确定的。

不是删除元素,而是在同一个数组中复制元素以替换您不想要的元素,例如:

// Move element 2 to element 1, erasing the old element 1
Track[1] = Track[2];
Track[2] = 0;

另一个解决方案是使用std :: vector而不是数组。如果Track2是一个向量,那么你可以使用vector :: erase方法删除一个元素。

另一种解决方案是将元素复制到较小的数组中,例如:

// New temporary smaller array
int Temp[2];
// Copy elements we want to keep
Temp[0] = Track2[0];
Temp[1] = Track2[2];

答案 3 :(得分:0)

有一些方法可以从数组中删除元素,但是你找不到一个删除末尾所有零元素的函数。

你需要自己照顾好这个。你需要的是找到数组的长度直到最后一个非零元素。你可以这样做但向后遍历数组:

int length;
for(length=Taille; i>=0; --length) {
   if (Track2[index] != 0) {
      break;
   }
}

length将具有数组的长度,您可以将其用作打印数组的上限