我是 C++ 和一般编程的新手,而且英语不是我的第一语言,所以我可能无法正确地表达我的问题以供您理解。
我写了下面的工作程序:
#include<iostream>
#include<vector>
using namespace std;
class Vector{
vector<int>numbers;
public:
Vector(vector<int> const& v) : numbers(v) {}
void print(){
for (const auto& elem : numbers){
cout << elem << " ";
}
}
};
int main(){
Vector p{ vector < int > {15, 16, 25} };
p.print();
}
现在,如果我尝试创建一个对象写作:
Vector p{ 15, 16, 25 };
这是行不通的。我的问题是我必须做什么才能让它工作?帮助将不胜感激!提前致谢。
获得所需内容的最简单方法是使用一组额外的大括号来指示所提供的参数一起构成构造函数的第一个参数。尝试:
int main() {
Vector p{ {15, 16, 25} };
p.print();
}
另一种方式,如果你想让它与 main
一起工作目前的情况是实现 initializer list构造函数。
#include <initializer_list>
#include <iostream>
#include <vector>
using std::vector;
using std::cout;
class Vector {
vector<int>numbers;
public:
Vector(vector<int> const& v) : numbers(v) {}
// Implement initializer list constructor
Vector(std::initializer_list<int> args) : numbers(args.begin(), args.end()) {}
void print() {
for (const auto& elem : numbers) {
cout << elem << " ";
}
}
};
int main() {
Vector p{ 15, 16, 25 };
p.print();
}
请注意,您可以将初始化列表目录传递给std::vector
的构造函数(Vector(std::initializer_list<int> args) : numbers(args) {}
会起作用),但这会导致列表的额外拷贝。