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

How to delete some values in an array using c++

本文关键字:数组 何使用 c++ 删除      更新时间:2023-10-16

我有一个系统,可以自动读取公司员工访问卡上存储的信息。这些信息存储在一个数组中。当读卡器不起作用时,员工必须在读卡器附近的密码板上输入自己的姓名和密码才能进入大楼,读卡器将自动创建信息存储在阵列中。数组的第三个第一个单元格总是用正确的值填充,其余单元格用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 contentu du tableau:Track2[0]=1 Track2[2]=3我想得到这样的结果:voici le conteu du tableau:Track2[0]=1 Track2[1]=0 Track2[2]=3这意味着,只有在我的数组的tird元素(此处为Track2[2])之后=0的值必须从我的数组中删除。我该怎么做?感谢

如果使用C++,请使用std::vector。std::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::擦除文档。

您的程序不会擦除数组的部分,它不应该打印数组的最后一部分(如果我读对了您的问题)。

为此,您可以保留另一个变量,其中包含最后一个可用的索引,并循环直到达到该索引为止。

如果您真的想从数组中擦除条目,我建议您改用std::vector

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

与其删除元素,不如在同一数组中向下复制元素,以替换您不想要的元素,例如:

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

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

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

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

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

你需要自己解决这个问题。您需要的是找到数组的长度,直到最后一个非零元素。你可以这样做,但向后遍历数组:

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

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