这将是一个非常简单的问题:在 C++03 中,我将使用std::pair
. 但是,当我希望我的两个值都属于同一类型时,必须重复该类型两次会有点麻烦。现在,使用 C++11,我们有了std::array
. 写这个会更惯用吗:
std::array<int, 2> foo;
...而不是那样:
std::pair<int, int> foo;
...当目标是存储两个相关数据时(例如,一个函数求解二次方程的结果)?
pair<T, T>
绝对是错误的:如果这些代表多项式的根,则
make_pair(1, 2) == make_pair(2, 1)
应该是正确的!
出于同样的原因,数组/向量也不起作用,除非您更改比较行为。
所以我会说创建一个表示具有固定大小的 a 的bag<T, N>
数据类型multiset<T>
,有点像如何array<T, N>
表示vector<T>
具有固定大小的 a 。
由于尺寸很小,您可以通过蛮力(比较,相等检查等)来做所有事情。
我仍然会使用 pair 来表示一个值与另一个值相关。Array 并没有向我传达这个意思。
正是出于惯用的原因,我建议使用pair
a 表示两个值都是相关的,而array
与值列表更相关(以我的拙见)。
例如,在您建议的用法中,两个值之间的关系将是二次函数本身。
std::pair
如果您在两个项目之间有关系,并且您想描述这种关系,那么这是有道理的。
但是,在您的情况下,我会使用std::array
,因为二次方程的两个解彼此之间没有任何关系(我可以看到解和方程之间的关系,但看不到两个解之间的关系)。
取决于更大的背景。
在您提到的示例中,我将使用std::array
,因为您还可以根据方程的度数对函数进行模板化:
template <int N>
std::array<double, N> solveEquation(const Polynomial<N>& poly);
我会说 is 的相应 C++11 抽象std::pair<>
,std::tuple<>
因为一对只是元组的一个特例。
std::pair<>
顺便说一句,不一定持有相同的类型。