使用vector作为类成员

时间:2017-05-31 19:41:09

标签: c++ class vector

我是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 };

它没有用。我的问题是我需要做些什么才能使它发挥作用?非常感谢帮助!提前谢谢。

2 个答案:

答案 0 :(得分:3)

获得所需内容的最简单方法是使用一组额外的大括号来指示提供的参数一起构成构造函数的第一个参数。试试:

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) {}将起作用),但这会产生额外的列表副本。

答案 1 :(得分:0)

你需要添加一个带有std :: initializer_list的构造函数,如下所示:

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

在你的其他构造函数的旁边添加它,这应该可行。