对象的向量 - 如何将参数传递给构造函数?

3

假设我有以下代码:

struct obj{
    int v;
    obj(int i = 1){
        v = i;
    }
};

int main(){
    vector<obj> v1(10);    // (1)
    vector<obj> v2(15);    // (2)
}

如上所述:

编号(1)创建一个向量,其中包含10个默认为v=1obj实例。
编号(2)如何将15作为参数发送给obj,使得v=15???

我在网上搜索并找到了这篇文章,但它似乎涉及更高级的内容,作为一个新手,我无法理解。


4
http://en.cppreference.com/w/cpp/container/vector/vector - Baum mit Augen
1
你想创建一个包含15个元素的obj对象,还是创建一个包含某个数量的obj对象的向量,每个对象都包含15个元素? - Beta
1
10个对象的构造值为15?还有如果我有两个或更多参数呢? - Hasan Zeen
2
为什么要点踩呢?请告诉我原因,这样我才能学到东西。这是我第一次提问。 - Hasan Zeen
1
投票下降应该附带一条评论,解释为什么进行了投票下降。 - natersoz
2个回答

5
vector<obj> v1(10);     // creates a vector of 10 obj, each initialized 
                        // with the default value 1

vector<obj> v2(10, 15); // creates a vector of 10 obj, each initialized 
                        // with the value 15

如果您想要向构造函数传递多个参数:

vector<obj> v3(10, obj(15, x, y)); // creates a vector of 10 obj, each 
                                   // initialized with (15, x, y)

当然,为了实现这一点,您需要提供一个接受三个参数的构造函数。

3
请注意,vector<obj> v2(10, 15);vector<obj> v2(10, obj(15));是相同的。这个vector构造函数的第二个参数是一个const T& value,每个元素都会使用value进行复制构造。将15作为参数传递时,会创建一个隐式临时的obj对象来传递给value - Remy Lebeau

4
您可以通过以下方式进行操作:
vector<obj> v3 (10,15);

10是对象的数量。
15是构造函数的参数。

对于多个参数,您可以按以下方式将多个值作为列表发送:

vector<obj> v3 (10, {15,25} );

{15,25}。这被称为初始化列表。

另一种替代方法是:

vector<obj> v3(10, obj(15,25));

请参考 Baum 的笔记,这是一个不错的参考资料。


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