C++如何统计数组内的子数组数量?含代码示例及替代方案咨询
问题分析
你给出的代码int arr[] = {{1, 4}, {2}, {3, 2, 6}};在C/C++中无法编译运行,原因是int arr[]是一维数组,但你使用了二维结构的初始化列表,类型不匹配。要实现这种包含多个可变长子数组的结构,需要用合适的容器或数组类型,以下是具体实现和统计子数组数量的方法:
实现方案与统计方法
1. C++ 使用 std::vector(推荐)
嵌套的std::vector可以完美支持可变长度的子数组结构,统计子数组数量直接取外层vector的元素个数即可:
#include <vector> #include <iostream> int main() { std::vector<std::vector<int>> arr = {{1, 4}, {2}, {3, 2, 6}}; int subArrCount = arr.size(); std::cout << "子数组数量:" << subArrCount << std::endl; // 输出3 return 0; }
2. C语言实现方式
方法A:指针数组(支持可变长度子数组)
通过指针数组指向独立的子数组,灵活度高:
#include <stdio.h> int main() { int arr1[] = {1, 4}; int arr2[] = {2}; int arr3[] = {3, 2, 6}; int* arr[] = {arr1, arr2, arr3}; // 通过sizeof计算指针数组的元素个数,即子数组数量 int subArrCount = sizeof(arr) / sizeof(arr[0]); printf("子数组数量:%d\n", subArrCount); // 输出3 return 0; }
方法B:固定长度二维数组
如果可以接受统一子数组长度(不足补默认值),可以用这种方式:
#include <stdio.h> int main() { // 每行长度统一为3,不足的位置补0 int arr[3][3] = {{1, 4, 0}, {2, 0, 0}, {3, 2, 6}}; // 行数即为子数组数量 int subArrCount = sizeof(arr) / sizeof(arr[0]); printf("子数组数量:%d\n", subArrCount); // 输出3 return 0; }
核心逻辑总结
统计子数组数量的本质就是获取外层容器/数组的元素个数:
- C++中嵌套vector直接调用
size()方法; - C语言中通过
sizeof(外层数组)/sizeof(外层数组[0])计算元素总数。
内容的提问来源于stack exchange,提问作者user16029920
相关产品推荐
相关产品推荐

