例如:
class apple
{
public:
string name;
apple::apple(string name) : name(name)
{
}
};
如果我想制作一堆每个都有苹果类型的列表,我想我可以做std::list<apple> empire("empire"), macintosh("macintosh")
之类的事情。基本上我想在创建列表时为list<T>
声明的类T的构造函数传递参数。对不起,如果我没有解释这个问题,如果你有这种能力,请随时编辑我的问题。
由于
编辑这个问题似乎令人困惑,这可能是因为我给出了一个糟糕的例子。我需要重新设计我的课程。按照这个例子,虽然我想要的是一个列表,所有帝国苹果,该列表中的每个苹果都有一个指定类型的帝国,以及一个列表,所有macintosh苹果和每个苹果在该列表中有一个指定类型的macintosh。
所以在这里澄清一些或混淆一些我们去。
class apple
{
public:
string variety_name;
string description;
apple::apple(string variety_name, string description)
: variety_name(variety_name), description(description)
{
}
};
int _tmain(int argc, _TCHAR* argv[])
{
// Vlad from Moscow's answer
std::list<apple> empire(1, apple("empire", "picked yesterday")),
macintosh(1, apple( "macintosh", "picked yesterday"));
// Vaughn Cato's answer
empire.push_back(apple("empire", "picked today"));
macintosh.push_back(apple("macintosh", "picked today"));
for(list<apple>::iterator it=empire.begin(); it != empire.end(); ++it)
{
cout << it->variety_name << " " << it->description << endl;
}
for(list<apple>::iterator it=macintosh.begin(); it != macintosh.end(); ++it)
{
cout << it->variety_name << " " << it->description << endl;
}
return 0;
}
因此,您可以看到存储品种一次而不是每次都更容易;我的班级显然需要重新设计,但这并不能使答案变得不那么有效。每个人都感谢您的帮助
答案 0 :(得分:6)
当然,您可以使用emplace()
,emplace_front()
和emplace_back()
使用适当的构造函数就地构造对象:
std::list<apple> list;
list.emplace(list.end(), "one");
list.emplace_front("two");
list.emplace_back("three");
答案 1 :(得分:4)
你可以做到
std::list<apple> a;
a.push_back(apple("delicious"));
答案 2 :(得分:2)
在C ++ 11中,您可以使用初始化列表:
#include <list>
#include <string>
int main() {
// C++11 initializer-list
std::list<std::string> species = { "empire", "macintosh" };
// Without C++11: You may initialize with an array:
const char* species_array[] = { "empire", "macintosh" };
std::list<std::string> species_list(
species_array,
species_array + sizeof(species_array)/sizeof(species_array[0]));
return 0;
}
苹果是:
int main() {
// C++11 initializer-list
std::list<apple> species = { apple("empire"), apple("macintosh") };
// Without C++11: Initialize with an array:
const apple species_arry[] = { apple("empire"), apple("macintosh") };
std::list<apple> species_list(
species_arry,
species_arry + sizeof(species_arry)/sizeof(species_arry[0]));
return 0;
}
答案 3 :(得分:0)
此
apple(string name);
是一个所谓的转换构造函数。它将std :: string类型的对象转换为apple类型的对象。编译器在等待aoole类型的对象但是获取std :: string类型的对象时可以隐式调用它。
如果您将构造函数声明为显式,则无法执行此操作。例如
explicit apple(string name);
在这种情况下,您需要明确指定构造函数。例如
std::list<apple> empire( 1, apple( "empire" ) );