这将是一个非常简单的问题:在C ++ 03中,我将使用std::pair
存储两个相同类型的值。但是,当我希望我的两个值都属于同一类型时,不得不重复两次类型是一种麻烦。现在,使用C ++ 11,我们有std::array
。写这篇文章是否更具惯用性:
std::array<int, 2> foo;
......而不是:
std::pair<int, int> foo;
......目的是存储两个相关数据(图片,例如函数求解二次方程的结果)?
答案 0 :(得分:4)
pair<T, T>
绝对错误:
如果这些代表多项式的根,那么make_pair(1, 2) == make_pair(2, 1)
应该是 true !
出于同样的原因,除非您更改比较行为,否则数组/向量也不会起作用。
所以我要说一个bag<T, N>
数据类型代表一个固定大小的multiset<T>
,有点像array<T, N>
表示具有固定大小的vector<T>
由于尺寸很小,你可以通过暴力(比较,平等检查等)来做所有事情。
答案 1 :(得分:1)
我仍然使用pair来表示一个值与另一个值相关。数组并没有向我传达这种意义。
答案 2 :(得分:0)
正是出于惯用原因,我建议使用pair
a表示两个值都相关,而array
与值列表更相关(以我的拙见)。
例如,在您建议的用法中,两个值之间的关系将是二次函数本身。
答案 3 :(得分:0)
std::pair
是有道理的。
然而,在你的情况下我会使用std::array
,因为二次方程的两个解没有任何关系(我可以看到解与方程之间的关系,但不是两个解之间的关系) )。
答案 4 :(得分:0)
取决于更大的背景。
在你提到的例子中我会选择std::array
,因为那样你也可以在等式的程度上模拟函数:
template <int N>
std::array<double, N> solveEquation(const Polynomial<N>& poly);
答案 5 :(得分:0)
我会说std::pair<>
的相应C ++ 11抽象是std::tuple<>
,因为一对只是元组的一个特例。
std::pair<>
不一定存在相同类型,BTW。