删除存储在数组中的特定类的对象(闭合)

问题描述 投票:2回答:2

我有我的代码有问题,我想知道,如果有人可以看看,我有我创建从一个阵列中删除了某个元素的功能。我使用线性搜索来查找元素,然后我重写我想摆脱与一前一后,因为我还没有找到一种方法来明确删除元素的元素。我的问题是,代码中并没有真正的工作作为元素不会被覆盖,也就是有办法在阵列中留出空白,一旦元素已被覆盖。

下面是我的代码:

void deleteinfo()
{
    string search ;
    int found ;

    cout << "\n Delete A Player's Information \n\n" ;
    cout << "Please Enter The Player's Last Name : " ;
    cin >> search ;

    found=linsearch(search);

    if (found==-1)
    {
        cout << "\n There is no player called " << search ;
    }
    else
    {
        player[found].getFirstName() = player[found + 1].getFirstName() ;
        player[found].getLastName() = player[found + 1].getLastName() ;
        player[found].getAge() == player[found + 1].getAge() ;
        player[found].getCurrentTeam() = player[found + 1].getCurrentTeam() ;
        player[found].getPosition() = player[found + 1].getPosition() ;
        player[found].getStatus() = player[found + 1 ].getStatus() ;

        cout << "\n Player has been deleted." ;
    }

    cin.get() ;

    menu() ;
}


int linsearch(string val)
{
    for (int j=0; j <= 3; j++)
    {
        if  (player[j].getLastName()==val)
         return j ;         
    }
        return -1 ;
}
c++ arrays class object
2个回答
1
投票

这只是一个例子,你如何能够解决这个问题。我假设,你有一个静态的长度阵列(玩家最大数量)。

Player *Players[MAX_PLAYERS];          //Array with pointers to Player objects.
for(int i = 0; i < MAX_PLAYERS; ++i)
    Players[i] = new Players(x, y, z); //Fills the array with some data.

现在为您擦除:

if(found > 0) {
    delete Players[found];             //Destroys the object in question.
    for(int i = found; i < MAX_PLAYERS - 1; ++i)
        Players[i] = Players[i + 1];   //Moves the entire list up by one.
    Players[MAX_PLAYERS - 1] = NULL;   //Marks the new end of the list.
}

这个小片断不会“复制”整个对象,而是他们在数组中向上移动(没有任何重建对象)。

该阵列是在它的“结束”,当你遇到第一个NULL指针(在MAX_PLAYERS最新的),占你的“空白”。或者,你可以省略“动起来”,只是销毁的对象和指针设置为NULL。这样的话,你就会知道,有没有球员出现。


0
投票

你所要做的就是复制跟着你想要一个位置到左边,并在结束时更新该数组的新长度删除元素的所有元素。例如:

for (size_t i = found + 1; i < player_length; ++i) {
    player[i - 1] = player[i];
}
--player_length;

player阵列的对象必须是可复制。我假设你有一个变量的地方,保存数组的当前长度(“长度”作为它目前有多少球员有它,而不是它的总容量。)

© www.soinside.com 2019 - 2024. All rights reserved.