C ++插入对象列表

时间:2015-05-03 23:23:00

标签: c++ list class visual-c++ insert

有人可以告诉我如何使用C ++将数据添加到我的类列表中 拜托?

#include <string>
class Person
{
private: 
    std::string Name;
public:
    Person();
    ~Person();
    std::string GetName()
    {
        return Name;
    }
    std::string SetName(std::string name)
    {
        name = Name;
        return name;
    }
}; 

void main()
{
    list<Person> lp = new list<Person>();
    Person p = new Person();
    p.Name = "Smith";
    lp.insert(p);
}
这是我的尝试。有人可以纠正我或给我另一个答案吗?感谢

4 个答案:

答案 0 :(得分:1)

如果你有可能使用c ++ 11或更高版本,请考虑使用:

list.emplace_back() 

list.emplace_front()

处理构造和插入。当然,如果你有一个带有字符串参数的Person构造函数,那就更好了。

Person::Person(std::string& name) { Name = name; }

在这种情况下你可以这样做:

lp.emplace_back("Smith");

答案 1 :(得分:0)

为什么你的SetName只是无效且需要退货?如果要返回新名称,还应该

Name = name;
return Name;

你换了它。

此外,您不需要任何new每个主函数都应该返回int值(如果没有错误,通常为0)。

固定代码:

#include <string>
#include <list>

class Person
{
private: 
    std::string Name;
public:
    //Person();
    //~Person();
    std::string GetName()
    {
        return Name;
    }
    void SetName(std::string name)
    {
    Name = name;
    }
};

int main()
{
    std::list<Person> lp;
    Person p;
    p.SetName("Smith");
    lp.push_back(p);
    return 0;
}

您需要包含列表才能使用它们,并且您无法直接指定私有成员。此外,您的声明是错误的 - 为此,我会推荐一些cpp教程并阅读文档。

答案 2 :(得分:0)

list.insert()接受一个迭代器,即你要插入新元素的位置。

您也可以

list.push_back(p);

这会在列表末尾插入“p”。

如果你这样做

list.push_front(p);

插入发生在列表的头部。

答案 3 :(得分:0)

  • 首先,由于您使用c ++进行编码,因此您的主函数应返回int

    int main()
    
  • 其次,您在非指针的对象上使用new关键字,请更正:

    // This would perhaps be better:
    list<Person*> lp;
    Person *p = new Person; // remember to delete p; later
    
  • 我没有看到您已添加<list>标头并使用std。您需要它才能使用列表。或者至少写一下std::listusing std::list;

  • 您正在尝试分配给私有类成员,要么将其声明为public,要么使用setter函数:

    p->Name = "Smith"; // remember for pointers, use the '->' or *(p).Name
    
  • emplace_back()可能就是您要使用的内容(自c ++ 11开始):

    lp.emplace_back(p);
    // otherwise, specify an iterator as first argument for insert:
    // lp.insert(lp.end(), p);