C++ c++;std::初始化器列表和构造函数
我正在尝试创建一个与向量“组”一起工作的函数 将组命名为C++ c++;std::初始化器列表和构造函数,c++,constructor,parameter-passing,C++,Constructor,Parameter Passing,我正在尝试创建一个与向量“组”一起工作的函数 将组命名为A,B,C。。。可以有任意数量的组。每组有一个“主”向量,如int类型的v_A,以及一个数量可变的相关向量,如v_A1,v_A2。。。所有类型均为float 我希望创建一个函数groupwise,该函数可以采用不同数量的组,每个组具有不同数量的元素,如下所示 #include <vector> using std::vector; struct group_t { vector<int> x; ve
A
,B
,C
。。。可以有任意数量的组。每组有一个“主”向量,如int
类型的v_A
,以及一个数量可变的相关向量,如v_A1
,v_A2
。。。所有类型均为float
我希望创建一个函数groupwise
,该函数可以采用不同数量的组,每个组具有不同数量的元素,如下所示
#include <vector>
using std::vector;
struct group_t {
vector<int> x;
vector<vector<float>> vv;
group_t(vector<int> x, std::initializer_list<vector<float>> lv) : x(x) { // constructor
for (auto v : lv) {
vv.push_back(v);
}
}
};
void groupwise(std::initializer_list<group_t> listofgroups) {}
int main() {
vector<int> v_A, v_B, v_C;
vector<float> v_A1, v_A2, v_B1, v_B2, v_B3, v_C1;
groupwise( // No matching function for call to 'groupwise'
{ v_A, { v_A1, v_A2 } },
{ v_B, { v_B1, v_B2, v_B3} },
{ v_C, { v_C1 } }
);
}
#包括
使用std::vector;
结构组{
向量x;
向量vv;
组(向量x,std::初始值设定项列表lv):x(x){//constructor
用于(自动v:lv){
vv.推回(v);
}
}
};
void groupwise(std::initializer_list listofgroups){}
int main(){
向量v_A,v_B,v_C;
向量v_A1,v_A2,v_B1,v_B2,v_B3,v_C1;
groupwise(//没有匹配的函数用于调用“groupwise”
{v_A,{v_A1,v_A2},
{v_B,{v_B1,v_B2,v_B3},
{v_C,{v_C1}}
);
}
我这里的嵌套初始值设定项列表的想法(如果这是我所做的?…)不起作用。我得到的编译器错误是调用groupwise
时没有匹配的函数
如何实现可以以最简单的方式调用的正确声明的函数groupwise
?如果可能的话,我希望在调用groupwise
之前避免显式构造每组向量,而是希望在调用groupwise
时自动处理这些向量(正如我在这里通过group\u t
的构造函数所打算的那样)
谢谢 您只需要在函数调用中使用另一对大括号来指示最外面的
初始值设定项列表,如下所示:
groupwise({ // here
{ v_A, { v_A1, v_A2 } },
{ v_B, { v_B1, v_B2, v_B3} },
{ v_C, { v_C1 } }
}); // and here
这是一个“./p>没有问题:”很快你就会习惯于这些事情,并且能够自己发现它:“禅也,如果回答了你的问题,就考虑接受这个答案。顺便说一句,@to-people怎么了,有时候你们可以用,有时候不行?是的,因为你们在评论我的帖子,我会自动得到通知。所以它忽略了@@zen•评论不应该用于扩展对话。因此,这样的“用例”可能被认为是不必要的。您可以在不使用@的情况下使用此人的姓名。(耸耸肩不是我的规则,只是StackOverflow作为问答论坛的一般规则。)