1

これは非常に単純な質問です。C++03 では、同じ型の 2 つの値をstd::pair. ただし、両方の値を同じ型にしたい場合、型を 2 回繰り返さなければならないのはなんとなく面倒です。さて、C++11 ではstd::array. これを書く方がより慣用的でしょうか:

std::array<int, 2> foo;

...代わりに:

std::pair<int, int> foo;

...目的が 2 つの関連データを格納することである場合 (たとえば、2 次方程式を解く関数の結果など)?

4

6 に答える 6

4

標準ライブラリにも Boost にも、これに適したデータ型はないと思います。

pair<T, T>絶対に間違っています:これらが多項式の根を表す場合はtrue の
make_pair(1, 2) == make_pair(2, 1)はずです!

同じ理由で、比較動作を変更しない限り、配列/ベクトルも機能しません。

bag<T, N>したがって、固定サイズの a を表すデータ型を作成するといいでしょう。固定サイズの a を表すmultiset<T>方法のようなものです。array<T, N>vector<T>

サイズが小さいので、力ずくでなんでもできる(比較、等値チェックなど)。

于 2013-11-26T11:10:39.290 に答える
1

1 つの値が他の値に関連していることを示すために、今でもペアを使用します。配列はその意味を私に伝えません。

于 2013-11-26T11:02:33.893 に答える
0

より大きなコンテキストに依存します。

あなたが言及した例では、 をstd::array使用します。これは、方程式の次数で関数をテンプレート化することもできるためです。

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

まさに慣用的な理由から、 a を使用することをお勧めします (私の謙虚な意見では) 値のリストに関連しているpair一方で、両方の値が関連していることを示します。array

たとえば、提案された使用法では、両方の値の関係は二次関数そのものになります。

于 2013-11-26T11:03:50.957 に答える
0

std::pair2 つのアイテム間に関係があり、その関係を説明したい場合に意味があります。

ただし、あなたの場合std::array、二次方程式の2つの解は互いに関係がないため、を使用します(解と方程式の関係はわかりますが、2つの解の間にはわかりません)。

于 2013-11-26T11:04:04.277 に答える
0

対応する C++11 の抽象化はstd::pair<>ですstd::tuple<>。ペアはタプルの特殊なケースに過ぎないからです。

std::pair<>ところで、必ずしも等しい型を保持しているわけではありません。

于 2013-11-26T11:05:36.593 に答える