c++ - 如何将 std::vector 名称视为 C 类型数组名称?

标签 c++ arrays vector

在 C 中,很容易做如下事情:

int foo (int arr[], int size) {

    // Do some stuff.

    // Recur ignoring half of the input array.
    return foo (arr + size / 2, size / 2);
}

我知道我们能够做到这一点,因为在 C 语言中,数组的名称基本上是指向内存中连续 block 的指针,基本的指针算法可以很好地处理它。

我的问题是如何使用 C++ vector 或数组容器实现这种便利?从根本上说,有没有其他技巧可以做到这一点?

据我所知,这根本行不通:

int foo (vector<int>& arr, int size) {

    // Do some stuff.

    // Recur ignoring half of the input array.
    return foo (arr + size / 2, size / 2);
}

最佳答案

如果您不能更改函数签名,那么您可以传递 vector 的 data()size() 属性,它们与函数兼容:

foo(v.data(), v.size());

关于c++ - 如何将 std::vector 名称视为 C 类型数组名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42000819/

相关文章:

C++ 模板图灵完备?

c++ - 如何使用 bazel 中的 make 规则链接库构建

c++ - 我可以告诉在 C++ 中使用 "new type[n]"创建的数组的大小吗?

javascript - 排序数组和 indexOf() 运行时

c - 为什么在函数中更改数组会影响原始数组?

c++ - 包含按值对映射进行排序的键的 vector

C++ fprintf只打印第一个字符串

c - 使用 C 返回数组

javascript - 向量,以最大速度计算运动力

c++ - 模板类和 vector