C++ std::数组成员函数empty(),max_size()-除了一致性之外没有任何用处?
这些成员函数是否看起来毫无用处,只是为了与其他容器保持一致而存在 例如:C++ std::数组成员函数empty(),max_size()-除了一致性之外没有任何用处?,c++,c++11,stdarray,C++,C++11,Stdarray,这些成员函数是否看起来毫无用处,只是为了与其他容器保持一致而存在 例如: std::array<int, 4> array1; // size of 4 (but no elements initialized) std::array<int, 0> array2; // size of zero. array1.empty(); // false - not empty even though no elements are initialized array2
std::array<int, 4> array1; // size of 4 (but no elements initialized)
std::array<int, 0> array2; // size of zero.
array1.empty(); // false - not empty even though no elements are initialized
array2.empty(); // true - empty and no way to add elements
array1.size(); // room for four now
array1.max_size(); // room for four forever
array2.size(); // no room for anything now
array2.max_size(); // ... or ever
std::数组数组1;//大小为4(但未初始化任何元素)
std::阵列2;//大小为零。
array1.empty();//false-即使未初始化任何元素,也不为空
array2.empty();//true-为空,无法添加元素
array1.size();//四个人的房间
数组1.max_size();//四个人的房间
array2.size();//现在没有地方放任何东西了
array2.max_size();/。。。或者永远
“”的答案处理零“size”参数和来自
sizeof()
的非零返回,即它即使为空也会占用空间。但这不是我要问的。是的,它们只是为了保持一致性,允许更容易的模板专业化。但你对std::array的评论仍然是错误的:它是一个修饰过的
int[4]
,从现在到永远。对你来说,每个标准中没有任何一个派生的C++对象小于1。 你在一些事情上是错误的:
std::array<int, 4> array1; // size of 4 but no elements
否,数组有4个元素(只能有4个)。所以它不是空的
std::array
的大小是固定的,它们的大小取决于它们的类型,而不是是否为它们的元素分配了任何值
但是关于一致性的争论你是对的:容器必须有
size()
和empty()
方法。对于std::array
来说,没有它们需要特殊的规则。有了这些方法,在泛型代码中使用std::array
就更容易了。要清楚,对于其他读者来说,“旁白”是指我提到的其他问题吗?是的,只是添加了你在链接中提到的信息,尽管这对你的问题并不重要。好的-我更正了示例代码中的相应注释。std::array
的所有元素都是默认初始化的,如果没有给出显式的初始化器。
array1.empty(); // false - no elements, but not empty