C++ 使用运算符+;=具有多个值
我希望创建一个运算符+=的模板,它将向向量添加值。我一直在修补参数包,但它对我不起作用(我想我作为C++的新手做了些错事)。基本上,我希望通过如下代码实现添加到向量末尾的效果:C++ 使用运算符+;=具有多个值,c++,vector,operator-overloading,parameter-passing,parameter-pack,C++,Vector,Operator Overloading,Parameter Passing,Parameter Pack,我希望创建一个运算符+=的模板,它将向向量添加值。我一直在修补参数包,但它对我不起作用(我想我作为C++的新手做了些错事)。基本上,我希望通过如下代码实现添加到向量末尾的效果: std::vector<int> v; v += 3, 4, 5, 6; std::vector v; v+=3,4,5,6; 如您所见,我想通过操作符覆盖向向量添加多个值。这是我现在掌握的代码: template<typename T, typename... Ts> void operat
std::vector<int> v;
v += 3, 4, 5, 6;
std::vector v;
v+=3,4,5,6;
如您所见,我想通过操作符覆盖向向量添加多个值。这是我现在掌握的代码:
template<typename T, typename... Ts>
void operator+=(std::vector<T> v1, Ts const &... ts) {
v1.push_back(ts);
}
模板
void运算符+=(标准::向量v1,Ts常量和…Ts){
v1.推回(ts);
}
但我收到一个错误,该表达式包含意外的参数包。如果不是参数包,那么如何通过重写运算符将这些值添加到向量中
提前感谢重载
+=
不足以从字面上启用该语法:
std::vector<int> v;
v += 1,2,3,4;
输出:
1 2 3 4
如果没有自定义的操作符,
则输出为1
,因为需要使用另一种写入上述行的方法
v.operator+=(1),2,3,4;
hacky_向量
可以工作,但在C++11之前是“ok”的。当没有初始值设定项列表和列表初始化时,通常需要一种更好的方法来初始化类似向量的对象,一些库发明了类似上面的东西。如今,这样的黑客不应该再使用了。用C++已经拥有的东西。< /P>
初始化:
std::vector<int> v{1,2,3,4,5};
重载
+=
不足以从字面上启用该语法:
std::vector<int> v;
v += 1,2,3,4;
输出:
1 2 3 4
如果没有自定义的操作符,
则输出为1
,因为需要使用另一种写入上述行的方法
v.operator+=(1),2,3,4;
hacky_向量
可以工作,但在C++11之前是“ok”的。当没有初始值设定项列表和列表初始化时,通常需要一种更好的方法来初始化类似向量的对象,一些库发明了类似上面的东西。如今,这样的黑客不应该再使用了。用C++已经拥有的东西。< /P>
初始化:
std::vector<int> v{1,2,3,4,5};
do to
v+=3,4,5,6
类似于do(v+=3)、4、5、6代码>然后v+=3因为下一个值未使用并且被编译器删除。例如,您不在Python中,3,4,5,6
不是一个元组,为什么不使用已经存在的成员函数呢<代码>v.insert(v.end(),{3,4,5,6})
您需要重载,
运算符才能获得准确的语法。这是一个非常奇怪的黑客,在初始化列表出现之前可以使用,现在看起来有点奇怪了outdated@Insekure在不涉及程序定义类型的标准容器中添加运算符重载通常弊大于利,所以我希望这样做是一种教育性练习。在真实代码中看到这一点的人必须立即搜索运算符重载,以了解其真正含义。@TEDLYNGO是的,这是一个教育性练习,但由于您和其他人在这篇文章中的帮助,我终于了解了模板和重写运算符的含义。我非常感激。非常感谢大家v+=3,4,5,6
类似于do(v+=3)、4、5、6代码>然后v+=3因为下一个值未使用并且被编译器删除。例如,您不在Python中,3,4,5,6
不是一个元组,为什么不使用已经存在的成员函数呢<代码>v.insert(v.end(),{3,4,5,6})
您需要重载,
运算符才能获得准确的语法。这是一个非常奇怪的黑客,在初始化列表出现之前可以使用,现在看起来有点奇怪了outdated@Insekure在不涉及程序定义类型的标准容器中添加运算符重载通常弊大于利,所以我希望这样做是一种教育性练习。在真实代码中看到这一点的人必须立即搜索运算符重载,以了解其真正含义。@TEDLYNGO是的,这是一个教育性练习,但由于您和其他人在这篇文章中的帮助,我终于了解了模板和重写运算符的含义。我非常感激。非常感谢大家