在以下代码中,编译器抱怨为: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;
}
array::assign()
是一个 Visual Studio 扩展。您正在使用 g++ 进行编译。在这里检查标准 g++ 数组
如前所述,根本没有assign
成员 to std::array
。
现在有趣的问题变成了为什么?毕竟其他容器都有assign
成员方法!
我会注意到,与其他容器不同,std::array
它具有固定大小。如果你使用std::vector<T>::assign
(这将是一个近似的等价物),向量会被适当地调整大小以匹配被分配的序列的大小;但是,使用数组是不可能的:
这将是违反直觉的,因为其他容器不会出现问题,因为它们的大小只是动态调整的。
出于类似的原因,std::array
没有:reserve
, capacity
, clear
, insert
, emplace
, erase
, push
/ pop
(和变体)或resize
. 他们都假设一个容器的大小可能会有所不同。
这很简单,正如您在此处看到的,std 数组没有分配成员函数。fill
但是,您应该可以使用一个名为的成员函数。