在以下代码中,编译器抱怨为:struct std::array<double,5ul> has no member named 'assign'
。 Here,似乎有可能。为什么会这样? (编译:g ++ 4.8.2)
#include <array>
int main()
{
std::array<double,5> arr;
arr.assign(4.); // error: has no member named 'assign'
return 0;
}
答案 0 :(得分:14)
array::assign()
是Visual Studio扩展。您正在使用g ++进行编译。点击standard g++ array
答案 1 :(得分:9)
如前所述,assign
只是std::array
成员。
现在有趣的问题变成为什么?毕竟,其他容器都有assign
成员方法!
我会注意到,与其他容器不同,std::array
具有固定大小。如果使用std::vector<T>::assign
(它等效近似),则适当调整向量的大小以匹配所分配的序列的大小;但是,使用数组是不可能的:
这是违反直觉的,因为其他容器不会出现问题,因为它们的尺寸只是在运行中进行调整。
出于类似原因,std::array
没有:reserve
,capacity
,clear
,insert
,emplace
,{{1 },erase
/ push
(和变体)或pop
。所有这些都假设一个容器的大小可能会有所不同。
答案 2 :(得分:5)
这很简单,因为你可以看到here std数组没有assign成员函数。但是,您应该可以使用名为fill
的成员函数。
答案 3 :(得分:2)
assign
方法,它不是std::array
的成员。成员fill
执行assign
在TR1中所做的工作。
assign
最初是std::tr1::array
的一部分(来自the TR1),并且被改为fill
,大约是C ++ 0x(现在是C ++ 11){{ 3}}(2008)。
这不是微软的扩展,我想他们可能已经维护了这种方法,以便与生产中的tr1
实现兼容并支持它们(方法实现完全相同)。