C++中查找vector内前后相邻元素均为0的元素 解决下标越界问题
错误原因说明
- 你对范围for循环的用法理解有误:
for (int i : sample)语法遍历得到的i是vector存储的元素值,不是元素的下标,你直接把i作为下标访问数组,本身就会产生大量非法下标,这是报错的核心原因 - 即使修正为下标遍历,首尾元素分别没有前一个、后一个相邻元素,本身不满足判断条件的前提,不需要参与遍历
- 你写的
sample[i - 1] == sample[i + 1] == 0语法不符合C++逻辑判断规则,连续相等判断需要拆分为两个独立判断用逻辑与&&连接
修复方案
直接改用下标遍历,跳过首尾元素即可,修复后的代码如下:
#include <iostream> #include <vector> using namespace std; int main() { vector<int> sample = { 0,3,0 }; // 从下标1开始遍历,到倒数第二个元素(下标为sample.size()-2)结束 for (int i = 1; i < sample.size() - 1; i++) { // 拆分判断条件,确认前后元素都是0 if (sample[i - 1] == 0 && sample[i + 1] == 0) { cout << "hello"; } } return 0; }
效果验证
你给出的测试用例{0,3,0}中,只有下标为1的元素3符合要求,运行后会输出hello,不会再出现下标越界报错。
内容的提问来源于stack exchange,提问作者Mo_AminKiaee
相关产品推荐
相关产品推荐

