使用向量作为类成员[重复]
Posted
技术标签:
【中文标题】使用向量作为类成员[重复]【英文标题】:using vector as class member [duplicate] 【发布时间】:2017-05-31 19:41:08 【问题描述】:我是 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 ;
它不起作用。我的问题是我必须做什么才能让它工作?帮助将不胜感激!提前致谢。
【问题讨论】:
欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。 “它不起作用。我的问题是我必须做什么才能让它起作用?” 不是一个清晰的问题描述。究竟是什么行不通?请逐字发布您的问题中的所有错误消息。理想情况下是minimal reproducible example。 “它不起作用” - 在什么意义上?你得到什么错误信息?你用的是什么编译器?什么版本的编译器? 你的错误是什么? 使用 Visual Studio 2013 Express,我收到以下错误消息。没有构造函数“Vector::Vector”的实例与参数列表参数类型匹配:(int, int, int) 【参考方案1】:获得所需内容的最简单方法是使用一组额外的大括号来指示提供的参数一起构成构造函数的第一个参数。试试看:
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)
可以),但这会导致列表的额外副本。
【讨论】:
谢谢,这回答了我的问题。很抱歉没有真正解释我的问题。【参考方案2】:您需要添加一个构造函数,该构造函数采用 std::initializer_list,如下所示:
Vector(std::initializer_list<int> v) : numbers(v)
将其与您的其他构造函数一起添加,这应该可以工作。
【讨论】:
如果你真的想避免这种情况,你可以改变它,使 v 是一个右值。这将允许 OP 请求的特定实现。 非常感谢。非常感谢以上是关于使用向量作为类成员[重复]的主要内容,如果未能解决你的问题,请参考以下文章
大家好,当一个类有一个向量作为它的数据成员时,为啥它的大小总是24? [复制]
类 std::vector<...> 没有名为 [重复] 的成员