30 条回复  ·  912 次点击
imKiva 小成 2024-1-28 15:08:55
template <typename T, size_t N>
size_t length(const T (&array) [N]) {
  return N;
}
stcheng 小成 2024-1-28 15:34:15
+1 to geelaw's answer
chendl111 初学 2024-1-28 16:11:15
#include <bits/stdc++.h>
using namespace std;

template <size_t n>
size_t get_array_length(int (&nums)[n])
{
    return n;
}

int main() {
    int nums[] = {1, 2, 3, 4, 5};
    size_t length = get_array_length(nums);
    std::cout << "The length of the array is: " << length << std::endl;

    // 打印数组中的所有元素
    for (size_t i = 0; i < length; ++i) {
        std::cout << nums << " ";
    }
    std::cout << std::endl;

    return 0;
}
ysc3839 小成 2024-1-28 16:23:22
@ripperdev 这里可以直接用 std::size 吧?用 std::distance 的话,遇到 std::list 可能会报很复杂的错误吧?
Droi 小成 2024-1-28 19:20:29
不确定生成的数据长度可以用向量,确定的话用结构体包裹数组与数组相应的长度。
方法很多啊,能用库当然是最方便的。
kirory 小成 2024-1-28 21:07:34
#include <span>
#include <iostream>

void f(std::span<int> arr ){
  std::cout << arr.size() <<"\n";
}
int main(){
  int arr[] = {1,2,3};
  f(arr);
}
Leonooo13 小成 2024-1-28 21:32:03
@rabbbit 指针指向数组,指针可以指向一个地址,一般指向数组的首地址,通过移动遍历地址。
junkun 小成 2024-1-28 22:48:01
C++20 可以用 std::span 。
zhuangzhuang1988 小成 2024-1-28 22:56:40
直接上 Span
我在 C#也是用 Span.
用得好, 可以少写很多代码
Feep 小成 2024-1-28 23:10:42
编译器遇到 形参列表里的 T[] 时会进行隐式转换
参考 https://zh.cppreference.com/w/cpp/language/array
返回顶部