【问题标题】: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)

标签: c++ class vector


【解决方案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&lt;int&gt; args) : numbers(args) {} 可以),但这会导致列表的额外副本。

【讨论】:

  • 谢谢,这回答了我的问题。很抱歉没有真正解释我的问题。
【解决方案2】:

您需要添加一个构造函数,该构造函数采用 std::initializer_list,如下所示:

Vector(std::initializer_list<int> v) : numbers(v){}

将其与您的其他构造函数一起添加,这应该可以工作。

【讨论】:

  • 如果你真的想避免这种情况,你可以改变它,使 v 是一个右值。这将允许 OP 请求的特定实现。
  • 非常感谢。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 2012-05-25
相关资源
最近更新 更多