4

次のコードでは、コンパイラは次のように文句を言います: struct std::array<double,5ul> has no member named 'assign'. ここでは、それが可能と思われます。なぜそうなのですか?(コンパイラ: g++ 4.8.2)

#include <array>

int main()
{
    std::array<double,5> arr;
    arr.assign(4.); // error: has no member named 'assign'
    return 0;
}
4

4 に答える 4

14

array::assign()Visual Studio の拡張機能です。g++ でコンパイルしています。ここで標準のg ++​​配列を確認してください

于 2014-06-17T05:52:25.370 に答える
9

すでに述べたように、単に にはassignメンバーがありませんstd::array

興味深い質問は、なぜ?結局のところ、他のコンテナーにはassignmember メソッドがあります。

std::array他のコンテナとは異なり、固定サイズであることに注意してください。を使用する場合std::vector<T>::assign(これはほぼ同等です)、ベクトルは割り当てられるシーケンスのサイズに合わせて適切にサイズ変更されます。ただし、配列ではそれは不可能です。

  • 割り当てられているシーケンスが配列より短い場合はどうしますか?
  • 割り当てられているシーケンスが配列よりも長い場合はどうしますか?

他のコンテナのサイズはその場で調整されるだけなので、問題は発生しないため、これは直観に反します。

std::array同様の理由でreservecapacityclearinsertemplaceerasepush/ pop(およびバリアント) またはresize. それらはすべて、サイズが異なるコンテナを想定しています。

于 2014-06-17T06:21:10.563 に答える
5

これは非常に単純です。ここでわかるように、std 配列のメンバー割り当て関数はありません。fillただし、使用できるはずのメンバー関数があります。

于 2014-06-17T05:51:11.433 に答える