1

这将是一个非常简单的问题:在 C++03 中,我将使用std::pair. 但是,当我希望我的两个值都属于同一类型时,必须重复该类型两次会有点麻烦。现在,使用 C++11,我们有了std::array. 写这个会更惯用吗:

std::array<int, 2> foo;

...而不是那样:

std::pair<int, int> foo;

...当目标是存储两个相关数据时(例如,一个函数求解二次方程的结果)?

4

6 回答 6

4

我认为在标准库或 Boost 中都没有适合于此的数据类型。

pair<T, T>绝对是错误的:如果这些代表多项式的根,则
make_pair(1, 2) == make_pair(2, 1)应该是正确的!

出于同样的原因,数组/向量也不起作用,除非您更改比较行为。

所以我会说创建一个表示具有固定大小的 a 的bag<T, N>数据类型multiset<T>,有点像如何array<T, N>表示vector<T>具有固定大小的 a 。

由于尺寸很小,您可以通过蛮力(比较,相等检查等)来做所有事情。

于 2013-11-26T11:10:39.290 回答
1

我仍然会使用 pair 来表示一个值与另一个值相关。Array 并没有向我传达这个意思。

于 2013-11-26T11:02:33.893 回答
0

正是出于惯用的原因,我建议使用paira 表示两个值都是相关的,而array与值列表更相关(以我的拙见)。

例如,在您建议的用法中,两个值之间的关系将是二次函数本身。

于 2013-11-26T11:03:50.957 回答
0

std::pair如果您在两个项目之间有关系,并且您想描述这种关系,那么这是有道理的。

但是,在您的情况下,我会使用std::array,因为二次方程的两个解彼此之间没有任何关系(我可以看到解和方程之间的关系,但看不到两个解之间的关系)。

于 2013-11-26T11:04:04.277 回答
0

取决于更大的背景。

在您提到的示例中,我将使用std::array,因为您还可以根据方程的度数对函数进行模板化:

template <int N>
std::array<double, N> solveEquation(const Polynomial<N>& poly);
于 2013-11-26T11:05:19.213 回答
0

我会说 is 的相应 C++11 抽象std::pair<>std::tuple<>因为一对只是元组的一个特例。

std::pair<>顺便说一句,不一定持有相同的类型。

于 2013-11-26T11:05:36.593 回答