C++使用vector实现可变长度数组查询时输出错误问题求助
代码错误分析
核心问题
你的代码问题出在sub_vector未在每次处理新子数组前清空,导致前序子数组的元素会累积到后续子数组中,最终查询结果不符合预期。
具体错误流程
- 处理第一个子数组时,
sub_vector存入元素[1,5,4],成功加入main_vector,此时main_vector[0] = [1,5,4],匹配预期 - 处理第二个子数组时,你没有清空
sub_vector中的旧元素,直接追加新输入的元素,最终sub_vector变为[1,5,4,1,2,8,9,3],加入main_vector后main_vector[1]的值和预期的[1,2,8,9,3]完全不符 - 执行查询
1 3时,取到的是main_vector[1][3],对应值为1,和你实际输出的结果一致。
修复方案
你只需要在每次循环处理新子数组前,清空sub_vector即可,修改后的循环代码如下:
for(int x = 0; x < n; x++) { sub_vector.clear(); // 新增该行,清空上一轮子数组的残留元素 cin >> length_of_sub_vector; for(;length_of_sub_vector > 0; length_of_sub_vector--) { cin >> input_element; sub_vector.push_back(input_element); } main_vector.push_back(sub_vector); }
你也可以选择将sub_vector的声明移动到循环内部,每次循环新建空的子数组,效果完全一致。
内容的提问来源于stack exchange,提问作者Kanishk Mewal
相关产品推荐
相关产品推荐

