【问题标题】:How to get the length of an array in c++?如何在 C++ 中获取数组的长度?
【发布时间】:2012-11-24 15:31:26
【问题描述】:

我尝试为此编写自己的函数,但结果错误

#include <iostream>

using namespace std;

template<typename T>
int array_length(T v[]) {
    return (sizeof v)/sizeof(T);
}

int main() {
    int v[] = {1, 2, 3, 4};
    cout << array_length(v) << endl;
    return 0;
}

【问题讨论】:

  • gist.github.com/3959946 查看最后一个函数。
  • @R.MartinhoFernandes:即使编译器自己在编译时知道大小,该函数也会在运行时给出大小。因此,我不会说这是一个好的实现。
  • 他只想要运行时的数组长度。
  • 到目前为止发布的答案仅适用于在编译时已知大小的数组。 AFAIK 没有可移植的方法来找出动态分配数组的长度(自己记住它是安全的)。

标签: c++


【解决方案1】:

类似这样的:

#include <cstddef> // for size_t

template< typename T, std::size_t N >
std::size_t length( const T (&)[N] )
{
  return N;
}

用法

int data[100];
std::cout << length(data) << "\n";

【讨论】:

  • 谢谢。但是是否可以不包含(仅 iostream)?
  • @HardRain 好吧,你可以让它返回一个 unsigned long long 而不是 std::size_t 例如。
【解决方案2】:

长度由数组提供。所以试试这个:

template <typename T, std::size_t N> std::size_t length( T (&)[N] ) {
    return N;
}

std::size_t 在标头&lt;cstddef&gt; 中找到。它是一个无符号整数类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2022-09-23
    • 2012-03-10
    • 1970-01-01
    相关资源
    最近更新 更多