【问题标题】:Copying std::vector of Pointers to a std::list [closed]将指针的 std::vector 复制到 std::list [关闭]
【发布时间】:2021-02-24 01:47:25
【问题描述】:

我有一个函数:

std::list<Song> SongCollection::getSongsForArtist(std::string artistName) const {
    std::list<Song>  songs;
    auto addArtistSongs = [=](Song* song) {
        if (song->m_artist == artistName) {
            return song;
        }
    };
    std::copy_if(m_songCollection.begin(), m_songCollection.end(), std::back_inserter(songs), addArtistSongs);  

    return songs;
}

应该根据我的 lambda 函数将 Song 对象添加到 list&lt;Song&gt;

m_collection 是我的指针向量,它包含 Songs,可以基于 artistName 复制到 std::list

试过back_inserter,但这似乎不起作用。

错误:

错误 C2679 二进制“=”:未找到采用“sdds::Song *const”类型右侧操作数的运算符(或没有可接受的转换);

以为我必须创建一个复制构造函数/赋值,但这也没有用。

【问题讨论】:

    标签: c++ algorithm lambda stl


    【解决方案1】:

    您的 lambda 没有一致的返回值...而 std::copy_if 期望 lambda 返回 bool。

    auto addArtistSongs = [=](Song* song) -> bool {
      return song->m_artist == artistName;
    }
    

    此外,您不应该将指针列表返回给 Song 吗?

    std::list<Song *> songs;
    

    【讨论】:

    • 嗯,好吧,是的,我没有注意到我错过了尾随返回类型。但这就是我感到困惑的地方,我正在处理的函数专门要求返回 std::list.
    • 所以不能直接将Song *的容器复制到Song的容器中。您需要在此过程中取消引用它。在这种情况下你不能使用std::copy_if
    猜你喜欢
    • 2011-03-18
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多