如何通过引用传递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
相关产品推荐
相关产品推荐

