std :: array错误:没有名为'assign'的成员

Shi*_*bli 4 c++ assign c++11 stdarray g++4.8

在以下代码中,编译器抱怨为: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;
}
Run Code Online (Sandbox Code Playgroud)

Tio*_*epe 14

array::assign()是Visual Studio扩展.您正在使用g ++进行编译.检查这里的标准g ++数组

  • s /标准g ++ /标准C++ / (7认同)
  • 为什么为什么?这个扩展需要什么?.. + 1 BTW (3认同)

Mat*_* M. 9

如前所述,根本没有assign成员std::array.

现在有趣的问题变成了原因?毕竟,其他容器都有assign成员方法!

我会注意到,与其他容器不同,std::array它具有固定的大小.如果你使用std::vector<T>::assign(这将是一个近似的等价物),矢量将适当调整大小以匹配所分配的序列的大小; 但是,使用数组是不可能的:

  • 如果分配的序列比数组短,你会怎么做?
  • 如果分配的序列比数组长,你会怎么做?

这将是违反直觉的,因为其他容器不会出现这个问题,因为它们的尺寸只是在飞行中进行调整.

出于同样的理由,std::array没有:reserve,capacity,clear,insert,emplace,erase,push/ pop(和变体)或resize.他们都假设容器的大小可能会有所不同.

  • @juanchopanza哈哈,好吧,没关系,回到那是一个愚蠢的扩展然后:) (3认同)

Sum*_*812 5

这很简单,你可以看到这里没有std数组的assign成员函数.但是有一个名为fill你应该可以使用的成员函数.