0

この配列から名前を削除しようとしていますが、削除された配列の最後の位置に空のスポットがあります。どうすればいいですか?これが私が以下で試したことです。削除しますが、最後まで移動しません。

const int array_size = 16;
string restaurants[array_size] = {"Texas Roadhouse","On The Border","Olive Garden","Panda       Express","Cracker Barrel","IHOP","Woohoo","Pei Wei","Mcdonalds","Denny's","Mrs. Fields","Subway","Dairy Queen","Burger King","Pizza Hut","Dominos"};
int current_size = 16;

cout << "Please enter the name of the Restaurant you would like to remove: ";
cin.ignore();
getline(cin, remove_restaurant);

remove(restaurants, restaurants_size, remove_restaurant);//function call

bool remove(string restaurants[], int& current_size, string name)//function to remove   array
{
    for (int i = 0; i < current_size; i++)//look at each name you want to remove
    {
        if ( restaurants[i] == name)
        {
        restaurants[i]=restaurants[i+1];
        current_size --;
        cout << "Restaurant removed successfully." << endl;
        return true;            
        }
    }
return false;
}
4

5 に答える 5

2
  1. 元と同じサイズの配列を作成する
  2. 元の配列の要素の反復を開始します
  3. 配列内の現在のアイテムが削除するアイテムと等しくない場合は、それを新しい配列に追加します
于 2013-05-03T17:54:20.603 に答える
2

remove-erase イディオムを and と共に使用std::removestd::fillます。

bool remove(string restaurants[], int& current_size, string name)//function to remove   array
{
    auto begin = std::begin(restaurants);
    auto end = std::next(begin, current_size);
    auto new_end = std::remove(begin, end, name);
    std::fill(new_end, end, {});
    current_size = std::distance(begin, new_end);
    if (new_end != end) {
        std::cout << "Restaurant removed successfully." << std::endl;
    }
    return new_end != end;
}
于 2013-05-03T17:58:42.650 に答える
0

現在のソリューションを修正する方法の 1 つを次に示します。私は ott に同意しますが、おそらく代わりにリストを使用する必要があります。

for (int i = 0; i < current_size; i++)//look at each name you want to remove
{
  if (restaurants[i] == name) {
    swap(restaurants[i], restaurants[current_size-1]);
    current_size --;
    cout << "Restaurant removed successfully." << endl;
    return true;
  }
}
于 2013-05-03T17:58:48.570 に答える