使用向量作为类成员。

3
我是一名初学者,对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 中的材料,了解您可以在这里提出什么样的问题以及如何提问。 - πάντα ῥεῖ
1
“它不起作用。我的问题是,我需要做什么才能让它工作?”并不是一个清晰的问题描述。到底哪里出了问题?请在您的问题中逐字逐句地发布所有错误消息。最好提供一个[MCVE]。 - πάντα ῥεῖ
请通过点击[编辑]按钮将所有相关信息添加到问题中。 - bolov
好的,显然你试图使用三个整数来初始化它。请使用Vector({1, 2, 3})。 - The Techel
尝试使用Vector p{{ 15, 16, 25} }; - user2100815
显示剩余5条评论
2个回答

4

最简单的方法是使用额外的一组花括号来表示提供的参数在一起形成构造函数的第一个参数。尝试使用以下代码:

int main() {

    Vector p{ {15, 16, 25} };
    p.print();
}

另一种方法是,如果您试图让现有的main起作用,则可以实施初始化列表构造函数。

#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) {}),但这会导致列表的额外复制。

谢谢,你回答了我的问题。很抱歉我没有真正解释清楚我的问题。 - Johnnylame

0
你需要添加一个接受 std::initializer_list 的构造函数,就像这样:
Vector(std::initializer_list<int> v) : numbers(v){}

将此添加到您的其他构造函数旁边,那么它应该可以正常工作。


如果你真的想避免这种情况,你可以将v更改为r值。这将允许OP请求的特定实现。 - Jayson Boubin
非常感谢。非常感激。 - Johnnylame

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接