【问题标题】:How to erase an element from a vectors vector?如何从向量向量中删除元素?
【发布时间】:2017-06-09 12:41:10
【问题描述】:

我在按索引从“组”中删除“成员”时遇到问题:

#include <vector>
#include <string>
using namespace std;

class Member
{
  public:
    explicit Member(const string &name, const unsigned long &key) : m_name(name), m_key(key) {}
    const string &getName() const {return m_name;};
    const unsigned long &getKey() const {return m_key;};

  private:
    string m_name;
    unsigned long m_key;
};
//------------------------------------------------------------------------
class Group
{
public:
    explicit Group(const string &name) : m_name(name) {}
    const string &getName() const {return m_name;};
    void addMember(const Member &member) {m_member.push_back(member);};
    const vector<Member> &getMember() const {return m_member;};

  private:
    string m_name;
    vector<Member> m_member;
};

void main() {
    vector<Group> group;
    group.push_back(Group("Membergroup 1"));
    group[0].addMember(Member("Mark", 123456));
    group[0].addMember(Member("John", 234567));
    group[0].getMember().erase(group[0].getMember().begin() + 1); //to delete John
}

错误: : 将 'const std::vector' 作为 'this' 参数传递会丢弃限定符 [-fpermissive] group[_group].getMember().erase(group[_group].getMember().begin() + 1 );

有人可以帮帮我吗?

【问题讨论】:

    标签: c++ vector std erase


    【解决方案1】:

    问题出在这里:

    const vector<Member> &getMember() const {return m_member;};
    

    函数getMember()(我建议将其称为getMembers())返回一个对向量的const引用。

    由于constness,编译器会阻止修改。

    您可以通过以下方式修复重构:

    class Group
    {
    public:
        // ...
        const vector<Member>& getMembers() const { return m_member; }
        vector<Member>& getMembers() { return m_member; }
        // ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多