如何在C++中初始化需要参数的结构数组

How to initialize an array of structs that demand arguments in C++

本文关键字:参数 结构 数组 初始化 C++      更新时间:2023-10-16

我试图初始化一个结构数组,但结构在初始化时需要参数,如下所示:

#include <iostream>
using namespace std;
struct MyStruct{
    string par1;
    double par2;
    MyStruct(string var1, double var2){
        par1=var1;
        par2=var2;
    }
};
int main(){
    MyStruct test("apples", 17.5);
    MyStruct MyArray[3];
return 0;
}

结构"test"初始化时没有问题,但当MyArray尝试初始化时,它会给我

'没有用于调用MyStruct::MyStruct()的匹配函数'

以及

'候选者需要2个参数,提供了0'

我想这是因为我必须使用par1和par2的一些参数来初始化它,但我不知道如何初始化,也不知道是否可能。如果有任何帮助,我将不胜感激,谢谢。

为每个数组元素提供一个初始化程序:

MyStruct MyArray[3] = {
    MyStruct("oranges", 42.6),
    MyStruct("bananas", 63.2),
    MyStruct("pomegranates", 3.2)
};

由于C++11,这可以稍微减少:

MyStruct MyArray[3] {
    {"oranges", 42.6},
    {"bananas", 63.2},
    {"pomegranates", 3.2}
};
int main(){
    std::vector<MyStruct> MyArray(3, MyStruct("apples", 17.5));
return 0;
}

这种方法有一些局限性:1)向量中的元素是相同的,2)类必须是可复制的。

有什么理由反对使用std::vector吗?

#include <vector>
std::vector< MyStruct > mystructs;
mystructs.push_back( MyStruct( "apples",   17.5 ) );
mystructs.push_back( MyStruct( "bananas",   7.5 ) );
mystructs.push_back( MyStruct( "cherries", 17.5 ) );