gpt4 book ai didi

c++ - 如何删除属于指针对象的指针 vector 中的项目

转载 作者:搜寻专家 更新时间:2023-10-31 01:29:51 24 4
gpt4 key购买 nike

我有一个播放列表类,其中包含歌曲指针 vector 。

class Playlist {
public:
Playlist();
Playlist(string);
vector<Song*> GetSongList() const;
private:
vector<Song*> songs;
string name;
};

函数GetSongList()如下:

vector<Song*> Playlist::GetSongList() const {
return songs;
}

在我的主要方法中,我有一个播放列表指针 vector :vector<Playlist*> playlists

我想从特定播放列表中删除歌曲指针,但我遇到了麻烦。这是我当前删除指定歌曲的代码:

Playlist* desiredPlaylist = playlists.at(index);
vector<Song*> temporarySongList = desiredPlaylist->GetSongList();
cout << "Pick a song index number to delete: ";
cin >> index;
temporarySongList.erase(tempSongList.begin() + index);

当我从 vector 中删除歌曲并重新输出 playlists.at(index).GetSongList() 的内容时这首歌没有被删除。我认为原因是调用 GetSongList()不检索实际的歌曲 vector ,而只是返回一个拷贝,所以我没有改变原始 vector 。如何直接从原始歌曲中删除歌曲?

最佳答案

使用成员函数 remove_playlist 从播放列表中删除歌曲。建议使用 std::list(代替 vector),因为播放列表中需要频繁删除、移动和插入。还可以使用智能指针来避免像这样的内存泄漏 std::list<std::shared_ptr<Song>>

void Playlist::remove_playlist(int index)
{
if( index < songs.size() )
{
auto v = songs.at(index);
songs.erase(std::remove(songs.begin(), songs.end(), v), songs.end());
}
}

关于c++ - 如何删除属于指针对象的指针 vector 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49166801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com