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

如何通过引用传递vector数组?求对应函数的引用式定义方法

用引用接收vector数组参数的函数定义方法

嘿,这个问题其实很好解决,咱们直接看两种靠谱的实现方式:

1. 针对固定大小数组的引用参数

你的代码里gr是一个包含10个vector<int>的数组,要让函数通过引用接收它,只需要把参数写成数组的引用类型就行:

#include <vector>

using std::vector;

// 正确的引用参数定义
void function(vector<int> (&gr)[10]) {
    // 示例操作:给第一个vector添加元素
    gr[0].push_back(42);
}

int main(void) {
    vector<int> gr[10];
    function(gr); // 直接传数组名,会绑定到引用上
}

这里的vector<int> (&gr)[10]可以拆开来理解:

  • [10]表示这是一个有10个元素的数组
  • vector<int>是数组每个元素的类型
  • (&gr)表示我们接收的是这个数组的引用,而不是拷贝或者指针

这样传递时不会复制整个数组,完全符合你“通过引用而非值接收”的要求,而且比指针更安全(引用不能为空,避免了空指针风险)。

2. 适配任意大小数组的通用写法(模板)

如果你希望函数能处理任意大小的vector<int>数组,而不局限于10个元素,可以用模板来实现:

#include <vector>

using std::vector;

// 模板参数N自动推导数组的大小
template <size_t N>
void function(vector<int> (&gr)[N]) {
    // 可以用N来遍历数组
    for (size_t i = 0; i < N; ++i) {
        gr[i].push_back(i); // 给每个vector添加对应索引的元素
    }
}

int main(void) {
    vector<int> gr1[10];
    vector<int> gr2[5];
    function(gr1); // 适配10元素数组
    function(gr2); // 适配5元素数组
}

模板会自动推导数组的大小N,这样你的函数就有了通用性,同时依然是通过引用传递数组,没有拷贝开销。

避坑提醒

别写成void function(vector<int> gr[10])——虽然看起来像数组参数,但C++会自动把这种写法转换成指针void function(vector<int>* gr),本质是指针传递,虽然也不会拷贝数组,但和引用的语义不同(指针可以为空,引用不行),不符合你“通过引用接收”的需求。

内容的提问来源于stack exchange,提问作者CaesarK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:47:10