C++中如何获取vector<int>数组的长度并实现遍历操作
问题解答:C++中遍历
vector<int> a[]类型数组的方法 vector<int> a[]是元素类型为vector<int>的C++原生数组,原生数组本身没有封装size()成员方法,所以调用a.size()会直接编译报错,不同场景下的遍历方案如下:
场景1:数组在当前作用域内定义,未作为参数传递给其他函数
这种情况下可以通过sizeof计算数组总长度,补全循环:
// 示例数组定义 vector<int> a[10]; // 补全后的外层循环 for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++){ // 遍历当前vector内的所有元素 for(int j = 0; j < a[i].size(); j++){ // 访问a[i][j]即可处理对应元素 } }
更简便的写法是使用C++11及以上版本支持的范围for循环,不需要手动计算长度:
for(auto& inner_vec : a){ for(int num : inner_vec){ // 直接处理每个int类型的元素num } }
场景2:数组作为函数参数传入
原生数组作为函数参数时会退化为指针,此时sizeof(a)得到的是指针的长度(通常为4或8字节),无法正确计算数组长度,有两种解决方法:
- 方法1:额外传递数组长度参数
// 函数定义 void traverse(vector<int> a[], int arr_len){ for(int i = 0; i < arr_len; i++){ for(int j = 0; j < a[i].size(); j++){ // 处理元素 } } } // 调用时传入计算好的长度 vector<int> a[10]; traverse(a, sizeof(a)/sizeof(a[0]));
- 方法2(更推荐):放弃原生数组,改用
vector<vector<int>>类型,直接调用size()方法获取长度
// 定义改为二维vector vector<vector<int>> a; // 循环直接写即可 for(int i = 0; i < a.size(); i++){ // 后续遍历逻辑不变 }
内容的提问来源于stack exchange,提问作者Dhanyaa Bharadwaj
相关产品推荐
相关产品推荐

