获得C样式数组长度的更好方法是什么?

0 c++ c++11

这些天,我正在阅读C ++入门。该书说,要获得C样式数组的长度,可以使用函数std :: begin和std :: end获得两个指针并将其相减。但是,我知道sizeof(a)/sizeof(a[0])如果aC型数组也可以使用。那么哪种方法更好,或者它们之间没有什么区别呢?

Fat*_*KIR 5

当今最好的方式(C ++ 17和更高版本)是std::size

#include <iterator>
...
int arr[5];
static_assert(std::size(arr) == 5);
Run Code Online (Sandbox Code Playgroud)

如果您没有访问C ++ 17的权限,也可以轻松滚动自己的代码:

template <class T, size_t N>
constexpr size_t size(const T (&arr)[N]) { return N; }
Run Code Online (Sandbox Code Playgroud)

更好的是,只需使用std::array,并使用它的size成员:

std::array<int, 5> arr;
static_assert(arr.size() == 5);
Run Code Online (Sandbox Code Playgroud)

  • ...和`std :: array`是其中最好的。;) (3认同)