You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何定义作为函数形参的vector?对应写法是否合规?

函数vector形参写法合规性说明

你给出的void Function(double vector[]) { }写法本身是C/C++的合法语法,但有两个核心前提需要明确:

  • 此处的vector只是普通的形参命名,和C++标准库提供的std::vector动态数组容器没有任何关联,函数形参中声明的数组会自动退化为指针,该写法和void Function(double* vector)完全等价。
  • 该写法仅适用于C风格数组的传递场景,你可以在main函数中动态分配数组后将首地址传入,比如:
    // 示例调用
    int main() {
        // 动态分配10个元素的double数组
        double* arr = new double[10];
        Function(arr);
        delete[] arr;
        return 0;
    }
    

但该写法存在明显缺陷:函数内部无法直接获取数组的元素个数,需要额外传入长度参数,修改后的函数原型为void Function(double vector[], int arr_len),避免出现越界访问错误。

如果你实际需要将C++标准库的std::vector作为形参传递,需要使用以下合规写法,按使用场景选择即可:

  • 仅读取vector内容、不需要修改:使用const左值引用,避免不必要的拷贝开销
    #include <vector>
    void Function(const std::vector<double>& vec)
    
  • 需要在函数内部修改传入的原vector:使用非const左值引用
    #include <vector>
    void Function(std::vector<double>& vec)
    
  • 需要在函数内部操作独立的vector拷贝:直接传值即可
    #include <vector>
    void Function(std::vector<double> vec)
    

使用std::vector无需手动管理内存,也不需要额外传递长度参数,调用vec.size()即可获取元素数量,是C++场景下更推荐的实现方式。


内容的提问来源于stack exchange,提问作者new to coding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:24:04