c ++删除struct数组中的元素

时间:2016-07-01 20:29:41

标签: c++ arrays struct

以下代码获取2个属性的用户输入并存储它。如果通过提示用户输入要删除的属性ID并且还更新<已将其从市场中移除,我一直未能找到删除属性信息的方法/ strong>属性详细信息,例如通过提示用户输入属性ID来更改询价。我的老师建议使用我迄今为止设法完成的结构数组。

#include <iostream>                                           // takes users input and prints out output 
#include<conio.h>                                             // declares several useful library functions for performing "console input and output"
#include <stdio.h>                                            // compiler directive which stores standard input output 
using namespace std;                                          // defines the standard namespace 
struct Property                                               // declares the struct as Property 
{
   int ID[3];                                                // declare variable "ID" of data type interger to identify property ID 
   int Asking_Price;                                         // declare variable "Asking_Price" of data type interger to to identity the asking price for the property
   char Type[10];                                            // declare variable "Type" of data type char to identify the property type (detatched, semi-detatched, terraced, flat, commercial)
   char Address[20];                                         // declare variable "Address" of data type char to identify the property address
};
int main()  

{
   Property My_Property[2];                                      // declare the struct, the array and the number of array elements 
   for (int i=0;i<2;i++)                                         // for loop counts the number of properties from 1 to 5
   {
      cout << "\n  Details of property ID " << i + 1 << " are :\n"; // Prints out the property ID 

      cout << "\t Enter the property asking price : ";             // Prompts the user to enter asking price fopr the property  
      cin >> My_Property[i].Asking_Price;                          // Takes users input and stores it in the array 

      cout << "\t Please enter the property type: ";               //Prompts the user to enter the property type
      cin>>My_Property[i].Type;                                    //Takes users input and stores it in the array 

      cout << "\t Please enter the property address : ";           //Prompts the user to enter the property address
      cin >> My_Property[i].Address;                               //Takes users input and stores it in the array 
   }

   for (int j = 0;j<2;j++)                                      // for loop counts the property information for all properties entered
   {
      cout << "\n Information on property number " << j + 1 << " is :\n";  //Prints out the stored property ID
      cout << "\t Asking Price :" << My_Property[j].Asking_Price<<endl;  //Prints out the stored asking price for the property 
      cout << "\t Property Type : " << My_Property[j].Type<<endl;            //Prints out the stored property type 
      cout << "\t Address : " << My_Property[j].Address<<endl;           //Prints out the stored address for the property

   }

   for (int k=0;k<2;k++)    
   {
      cout << "\n Please enter the property ID for the property you would like to delete : \n ";
      cin>> My_Property[k].ID[3]; 

      if(My_Property[k].ID[3]>2)
      {
         cout<<"\n\n This property ID does not exist, press ENTER to try again: \n";
      }
      else
      {
         //trying to figure out the delete code

      }
      _getch(); //read characters from screen`enter code here`

   }
}

1 个答案:

答案 0 :(得分:1)

您实际上无法从数组中删除项目,因为数组具有固定大小。从固定大小的容器中删除项目的常用方法是将所有后续元素向下移动一个空格以覆盖您不想要的项目。

Property props[10];
int prop_count = 0;
// Fill props somehow, incrementing prop_count each time you add an item
std::cout << "\n Please enter the property ID for the property you would like to delete : \n ";
int to_delete;
std::cin >> to_delete;
for (int i = to_delete + 1; i < prop_count; ++to_delete) {
    props[i - 1] = props[i];
}
prop_count -= 1;

这或多或少是std::vector在幕后工作的方式。

如果您不关心保持所有元素的连续性,可以添加一些方法将Property标记为已删除,但这往往会导致更复杂的代码。

最后,你应该只使用像std::vector这样的可重复大小的容器,此时你可以调用std::vector::erase来删除它中的项目。