C ++使用用户输入填充对象向量

时间:2015-10-23 09:00:06

标签: c++ vector

我是矢量新手和新手。据说,我发现了一些关于如何创建对象矢量的帖子。我想知道如何从用户输入创建对象向量?假设程序要求用户提供他/她想要创建的员工(班级)的数量。用户想要添加5名员工。因此,用户必须输入员工的姓氏和名字。我有一个for循环,但我不知道如何抓住用户输入(也许使用getline和push_back?)并将其存储在向量中。

//Lets say class.h looks like this
class Employee
{
private:
    string lastName;
    string firstName;
public:
    void setLastname(string);
    void setFirstname(string);
    string getLastname() const;
    string getFirstname() const;
}

4 个答案:

答案 0 :(得分:3)

您的Employee类应该有一个构造函数。收集输入时,您需要所有构造函数参数。然后,要将Employee添加到vector<Employee>,请致电employees.emplace_back( ctor-arguments )

答案 1 :(得分:0)

其他用户提供了一个很好的示例,解释了如何在现代C ++中使用emplace_back 如果使用pre-C ++ 11版本,则没有emplace_back方法。在这种情况下,您可以使用旧式vector手动收集push_back中的数据。您可以简单地定义一个向量:

vector<Employee> employees;

然后,您可以逐行阅读您的数据,创建新对象,根据您的业务逻辑填充它们并附加到vector

int n;

int main() 
{
    cout << "Enter number of employyes: "; cin >> n;

    for (int i = 0; i < n; i++)
    {
        std::string s;
        Employee employee; // Create object

        cout << "Employee " << i << ". First name: "; cin >> s;
        employee.setFirstname(s); // Fill object

        cout << "Employee " << i << ". Last name: "; cin >> s;
        employee.setLastname(s); // Keep filling it

        cout << "Welcome, " << employee.getFirstname() << " " << employee.getLastname() << endl;
        employees.push_back(employee); // Add to vector
    }
}

您还可以定义一个构造函数,同时将firstnamelastname作为参数,以便于使用。

答案 2 :(得分:0)

M-x list-packages RET 有一个名为std::vector的好方法,

  

将新元素追加到容器的末尾。该元素是通过std :: allocator_traits :: construct构造的,它通常使用placement-new在容器提供的位置构造元素。

因此,您唯一能够使用它的是一个合适的构造函数。

emplace_back

答案 3 :(得分:0)

class Employee
{
private:
    string lastName;
    string firstName;
public:
    Employee(string paramLastName, string paramFirstName) : lastName(move(paramLastName)), firstName(move(paramFirstName)) {}
    void setLastname(string);
    void setFirstname(string);
    string getLastname() const;
    string getFirstname() const;
}

您需要一个构造函数,它将两个字符串作为输入。显然你可以没有这个,但这会减少冗长。

  

Employee(string paramLastName,string paramFirstName):   lastName(move(paramLastName)),firstName(move(paramFirstName)){}

您需要以这种方式调用它。

vector<Employee> inp;
string tmp1, tmp2;
while(std::cin>>tmp1 >> tmp2) {
    inp.emplace_back(tmp1, tmp2);
}

(假设您将使用c ++ 11支持进行编译)