簡體   English   中英

我如何檢查數組是否已滿並且大小是原來的兩倍/一半?

[英]How can I check if array is full and double/half the size of it?

該程序從文本文件讀取信息,將其存儲在數組中,並執行3種功能之一。 我需要能夠檢查數組是否已滿,如果是,則將大小翻倍;如果刪除了數組的1/4,則大小翻倍。 力求簡短,如果您需要更多信息,請告訴我。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

struct info{
  char letter;
  string SSN;
  string firstName;
  string lastName;
};

void insertion(int &count, int &validInsertationCount, string &SSN, char &letter, string &firstName, string &lastName, info *list);
void deletion(int &count, int &validDeletionCount, string &SSN, char &letter, string &firstName, string &lastName, info *list);
void retrieval(int &count, int &validRetrievalCount, string &SSN, string &firstName, string &lastName, info *list);

int main(int argc, char* argv[]){

  int arraySize = 1000;
  struct info list[1000];
  fstream input(argv[1]);
  int count = 0;
  int validInsertationCount = 0;
  int validDeletionCount = 0;
  int validRetrievalCount = 0;
  while(!input.eof()){
    input >> list[count].letter >> list[count].SSN >> list[count].firstName >> list[count].lastName;

    if(list[count].letter == 'i'){
      insertion(count, validInsertationCount, list[count].SSN, list[count].letter, list[count].firstName, list[count].lastName, list);
    }
    else if(list[count].letter == 'd'){
      deletion(count, validDeletionCount, list[count].SSN, list[count].letter, list[count].firstName, list[count].lastName, list);
    }
    else if(list[count].letter == 'r'){
      retrieval(count, validRetrievalCount, list[count].SSN, list[count].firstName, list[count].lastName, list);
    }
    count++;
  }
  input.close();

  int numberOfItems = validInsertationCount - validDeletionCount;

  cout << "The Number of Valid Insertation: " << validInsertationCount << endl;
  cout << "The Number of Valid Deletion: " << validDeletionCount << endl;
  cout << "The Number of Valid Retrieval: " << validRetrievalCount << endl;
  cout << "Item Numbers in the array: " << numberOfItems << endl;
  cout << "Array Size is: " << arraySize  << endl;
  //cout << "Time Elapsed: " <<  <<endl;                                                                                                                     
}
void insertion(int &count, int &validInsertationCount, string &SSN, char &letter, string &firstName, string &lastName, info *list){
  for(int i = 0; i < count; i++){
    if(SSN == list[i].SSN && list[i].letter == 'i'){
      for(int k = i; k < count; k++){
      list[k].SSN = list[k+1].SSN;
      list[k].letter = list[k+1].letter;
      list[k].firstName = list[k+1].firstName;
      list[k].lastName = list[k+1].lastName;
      }
      count--;
      return;
    }
  }
  validInsertationCount++;
  return;
}
void deletion(int &count, int &validDeletionCount, string &SSN, char &letter, string &firstName, string &lastName, info *list){
  for(int i = 0; i < count; i++){
    if(SSN == list[i].SSN && firstName == list[i].firstName && lastName == list[i].lastName){
      for(int k = i; k < count; k++){
      list[k].SSN = list[k+1].SSN;
      list[k].letter = list[k+1].letter;
      list[k].firstName = list[k+1].firstName;
      list[k].lastName = list[k+1].lastName;
      }
      count--;
      validDeletionCount++;
      return;
    }
  }
}
void retrieval(int &count, int &validRetrievalCount, string &SSN, string &firstName, string &lastName, info *list){
  for(int i = 0; i < count; i++){
    if(SSN == list[i].SSN && firstName == list[i].firstName && lastName == list[i].lastName){
      validRetrievalCount++;
    }
  }
  return;
}

您不能簡單地調整靜態分配的數組的大小,因此需要使用std :: vectormalloc / new來分配動態數組。 但是,在這種情況下,您無法使用sizeof()確定數組的大小。 因此,您可以保留大小變量,也可以使用“定界符”值來精確定位數組的末尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM