如何在已声明的向量中插入传递给函数的一组值 让我们考虑这个C++代码: std::vector<int> v; void setTipp(int& n1, int& n2, int& n3, int& n4, int& n5, int& n6) { //insert all 6 elements inside vector //but not like v.pushback(n1); etc //also not like v.resize(6); v[0]=n1; etc } std::vector v; 无效设置(内部和n1、内部和n2、内部和n3、内部和n4、内部和n5、内部和n6){ //在向量中插入所有6个元素 //但不像v.pushback(n1)等 //也不像v.resize(6);v[0]=n1;等等 }

如何在已声明的向量中插入传递给函数的一组值 让我们考虑这个C++代码: std::vector<int> v; void setTipp(int& n1, int& n2, int& n3, int& n4, int& n5, int& n6) { //insert all 6 elements inside vector //but not like v.pushback(n1); etc //also not like v.resize(6); v[0]=n1; etc } std::vector v; 无效设置(内部和n1、内部和n2、内部和n3、内部和n4、内部和n5、内部和n6){ //在向量中插入所有6个元素 //但不像v.pushback(n1)等 //也不像v.resize(6);v[0]=n1;等等 },c++,C++,是否有一种方法可以在向量v中自动插入所有6个元素,即使向量v已经贴花 我想在v里面插入值,比如v{n1,n2….n6};或者 for (int i=0; i<=6;i++){ //v.pusback(n1);pushback(n2) etc. //or v[i]=n1....n6; } for(int i=0;i 我想在v里面插入值,比如v{n1,n2….n6} 您可以尝试: int arr[] = {n1, n2, n3, n4, n5, n6}; v.insert(std::en

是否有一种方法可以在向量v中自动插入所有6个元素,即使向量v已经贴花

我想在v里面插入值,比如v{n1,n2….n6};或者

for (int i=0; i<=6;i++){
//v.pusback(n1);pushback(n2) etc.
//or v[i]=n1....n6;  
}
for(int i=0;i
我想在v里面插入值,比如v{n1,n2….n6}

您可以尝试:

int arr[] = {n1, n2, n3, n4, n5, n6};
v.insert(std::end(v), std::begin(arr), std::end(arr));
我想在v里面插入值,比如v{n1,n2….n6}

您可以尝试:

int arr[] = {n1, n2, n3, n4, n5, n6};
v.insert(std::end(v), std::begin(arr), std::end(arr));

您可以使用初始值设定项\u列表:

std::vector<int> v;
void setTipp(int n1, int n2, int n3, int n4, int n5, int n6) {
    for (int i : {n1, n2, n3, n4, n5, n6}) {
        v.push_back(i);
    }
}


您可以使用初始值设定项\u列表:

std::vector<int> v;
void setTipp(int n1, int n2, int n3, int n4, int n5, int n6) {
    for (int i : {n1, n2, n3, n4, n5, n6}) {
        v.push_back(i);
    }
}

用于一次插入整个范围
r
,例如:

using std::begin;
using std::end;
v.insert(v.end(), begin(r), end(r));
例如,
v
r
可以是:

std::vector<int> v;
const int r[] = {3, 4, 5};
std::vector v;
常量int r[]={3,4,5};
使用和通过ADL的优点是,它可以与任何实现适当操作的容器以及阵列一起使用。

用于一次插入整个范围的
r
,例如:

using std::begin;
using std::end;
v.insert(v.end(), begin(r), end(r));
例如,
v
r
可以是:

std::vector<int> v;
const int r[] = {3, 4, 5};
std::vector v;
常量int r[]={3,4,5};
通过ADL使用和的优点是,它可以与任何实现适当操作的容器以及数组一起使用。

您可以通过这种方式与一起使用,并对每个元组值应用
push_
。不幸的是,您也需要使用,这使得整个练习对我来说有点繁重

//给定:
vec_键入my_vec;
//做:
标准::应用(
std::bind(my_vec,&vec_type::push_back,_1),
标准::组合(n1、n2、n3、n4、n5、n6)
);
[可能不会编译,只是演示想法。]

  • 您仍然多次调用
    push_-back
    ,这并不是真正的优化
  • std::tuple
    只比
    std::vector
    稍微轻一些,而且在大量参数下可能不是最佳选择
您可以使用with,并以这种方式对每个元组值应用
push_
。不幸的是,您也需要使用,这使得整个练习对我来说有点重

//给定:
vec_键入my_vec;
//做:
标准::应用(
std::bind(my_vec,&vec_type::push_back,_1),
标准::组合(n1、n2、n3、n4、n5、n6)
);
[可能不会编译,只是演示想法。]

  • 您仍然多次调用
    push_-back
    ,这并不是真正的优化
  • std::tuple
    只比
    std::vector
    稍微轻一些,而且在大量参数下可能不是最佳选择

您可以使用带有可变参数包的函数模板,自动将所有参数(无论有多少)添加到向量中:

template<class... N>
void setTipp(N&... n)
{
    (v.push_back(n), ...);
}
模板
void setTipp(N&…N)
{
(五)推回;
}

也就是说,考虑到您在注释中对该情况的进一步描述,将参数作为单独的变量传递是没有意义的。您可以使用数组。

您可以使用带有变量参数包的函数模板将所有参数(无论有多少)自动添加到向量中:

template<class... N>
void setTipp(N&... n)
{
    (v.push_back(n), ...);
}
模板
void setTipp(N&…N)
{
(五)推回;
}

也就是说,考虑到您在注释中对该案例的进一步描述,将参数作为单独的变量传递是没有意义的。您可以使用数组来代替。

您是要求只传递六个参数,还是只想插入“所有参数”?需求相当模糊,为什么要将元素推到向量而不将元素推到向量?听起来像是XY问题。你能给出一个上下文来说明为什么要使用这样的函数吗?嗨,举个确切的例子吗?这些值必须来自某个地方,一个典型的调用是什么样子的?你真的有X吗某个地方的变量?在这种情况下,为什么不首先将它们分组到一个数组中?“这是一个函数,它从正在玩乐透游戏的玩家那里获取数字,例如49个中的6个,等等。”这让我们回到:为什么该函数在第一个位置获取单独的参数?您可以“自动”如果函数采用数组作为参数(请参见Jarods答案),则不按单个数字插入。您是要求只传递六个参数,还是只想插入“所有参数”?需求相当模糊,为什么要将元素推到向量而不将元素推到向量?听起来像是XY问题。你能给出一个上下文来说明为什么要使用这样的函数吗?嗨,举个确切的例子吗?这些值必须来自某个地方,一个典型的调用是什么样子的?你真的有X吗某个地方的变量?在这种情况下,为什么不首先将它们分组到一个数组中?“这是一个函数,它从正在玩乐透游戏的玩家那里获取数字,例如49个中的6个,等等。”这让我们回到:为什么该函数在第一个位置获取单独的参数?您可以“自动”如果函数采用数组作为参数(请参见Jarods答案),则插入时不按单个数字。最好使用
std::end(arr)
。而不是
arr+6
最好使用
std::end(arr)
。我知道函数接口是给定的,而不是
arr+6
Hmm。不过,我确实认为范围插入是最好的选择。@JensFinkhaeuser是的,我试图展示通用的方法,它基本上可以应用于任何情况,包括OP's.Hmm,我知道函数接口是给定的。我确实认为不过,这个范围插入是最好的选择。@JensFinkhaeuser是的,我试图展示一种通用的方法,它基本上可以应用于