添加标准::p空气和 + 运算符
Add std::pair with + operator
在以下示例中,有没有一种简单的方法可以使 a+b 工作:
#include <utility>
#include <iostream>
int main ()
{
std::pair<int, int> a=std::make_pair(1,2);
std::pair<int, int> b=std::make_pair(3,3);
std::pair<int, int> c = a+b;
return 0;
}
template <typename T,typename U>
std::pair<T,U> operator+(const std::pair<T,U> & l,const std::pair<T,U> & r) {
return {l.first+r.first,l.second+r.second};
}
int main ()
{
std::pair<int, int> a=std::make_pair(1,2);
std::pair<int, int> b=std::make_pair(3,3);
std::pair<int, int> c = a+b;
return 0;
}
您还可以使用更多模板类型来执行此操作,以支持添加两种不同的类型。现在它支持添加第一个和第二个是不同类型的对,但两个对和返回必须具有相同的类型。
如果你想使功能真正通用,你可以这样做
template <typename T,typename U, typename V,typename W>
auto operator+(const std::pair<T,U> & l,const std::pair<V,W> & r)
-> std::pair<decltype(l.first+r.first),decltype(l.second+r.second)>
{
return {l.first+r.first,l.second+r.second};
}
在 c++14 中,如果您显式返回一对,则可以摆脱 auto 而不是尾随返回类型。
您可以
为二进制+
运算符定义覆盖,该运算符专用于pair<int, int>
参数:
std::pair<int, int> operator +(const std::pair<int, int>& x, const std::pair<int, int>& y) {
return std::make_pair(x.first + y.first, x.second + y.second);
}
试试这段代码:
#include <utility>
#include <iostream>
namespace
{
std::pair<int,int> operator+(const std::pair<int,int> &a ,const std::pair<int,int> &b )
{
return std::make_pair(a.first+b.first,a.second+b.second);
}
}
int main ()
{
std::pair<int, int> a=std::make_pair(1,2);
std::pair<int, int> b=std::make_pair(3,3);
std::pair<int, int> c = a+b;
std::cout<<c.first<<" "<<c.second;
return 0;
}
是的,你可以像这样重载运算符+:
#include <utility>
#include <iostream>
std::pair<int,int> operator+(const std::pair<int, int>& x, const std::pair<int, int>& y) {
return std::make_pair(x.first+y.first, x.second+y.second);
}
int main ()
{
std::pair<int, int> a=std::make_pair(1,2);
std::pair<int, int> b=std::make_pair(3,3);
std::pair<int, int> c = a+b;
std::cout << "c= ("<<c.first<<", "<<c.second<<")"<<std::endl;
return 0;
}
会给你这个:
./a.out
c= (4, 5)
相关文章:
- 标准库类型的赋值运算符的引用限定符
- 标准::变体的赋值运算符
- 标准::可选枚举的比较运算符
- 重载运算符 + 用于向量:命名空间标准
- 与标准中的"运算符<<"不匹配
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- c++标准是否指定了运算符&&(内置)的求值顺序?
- 运算符的要求<恒定性在标准::stable_sort
- 标准::矢量的通用运算符>>
- C++ - <<运算符重载,链表 - 地址而不是标准输出
- 为什么标准在移动分配运算符中使用交换?
- 在全局命名空间中重载不依赖于用户定义类型的标准定义类型的运算符是否格式正确?
- 标准::设置运算符的使用<
- 静态与成员运算符重载:标准::运算符<< 和 std::ostream::运算符<<
- 视觉C 在操作数中向标准运算符中的隐式转换
- 是否保证标准提取运算符>>在失败时不会更改参数?
- 如何在不与标准库运算符冲突的情况下为一组相关类重载运算符?
- 是否有标准的C++函数,类似于地址运算符&?
- 重载运算符运算符<在我的类中没有被 STL 使用max_element 标准 Haskell 函数 :: (a -> 也许 a) -> a -> [a]
- 格式化的输出运算符标准iostream对象可以抛出什么样的异常