gpt4 book ai didi

c++ - 使用硬编码元素初始化 std::vector 的最简单方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:44 25 4
gpt4 key购买 nike

我希望创建一个 MyClass 的 vector ,如以下 Course 类。我希望传递一个字符串数组作为类(class)名称。所以我写

struct Course {
int id;
string name;
static int id_generator;

Course() {}
Course(string s);

};

Course::Course(string s) {
name = s;
id = id_generator++;
}
int Course::id_generator = 0;

这行得通

string course_names[] = {"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"};
vector<Course> course_vector(begin(course_names), end(course_names));

但这不是

vector<Course> course_vector = {"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"};

error: could not convert ‘{"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<Course>’

为什么?如何做得更好?

最佳答案

用于聚合类型作为数组的聚合初始化:

string course_names[] = {"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"};

不同于initializer_list初始化。 std::vector提供一个接受 std::initializer_list<T> 的构造函数,这就是当您尝试初始化 vector 时调用的构造函数带牙套。为了使其正常工作,每个元素都需要额外的大括号:

std::vector<Course> course_vector = {{"Linux"}, 
{"C++"},
{"HTML"},
{"HTML5"},
{"NodeJS"},
{"Shell"},
{"Python"}};

此外,我最好将构造函数更改为:

Course::Course(std::string const &s) : id(id_generator++),  name(s) { }

Live Demo

关于c++ - 使用硬编码元素初始化 std::vector<MyClass> 的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com