我是矢量新手和新手。据说,我发现了一些关于如何创建对象矢量的帖子。我想知道如何从用户输入创建对象向量?假设程序要求用户提供他/她想要创建的员工(班级)的数量。用户想要添加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;
}
答案 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
}
}
您还可以定义一个构造函数,同时将firstname
和lastname
作为参数,以便于使用。
答案 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支持进行编译)