如何判断二维vector是否包含指定vector及编译报错排查
错误原因
- 编译错误核心是
std::find使用不符合要求:std::find用于在迭代器范围内查找单个指定值,你代码中遍历的是vector<int>类型的行元素,每个元素是int类型,但你第三个参数传入的是vecx(完整的vector<int>对象),二者类型不匹配,编译器无法完成比较操作,直接抛出编译错误。 - 额外逻辑问题:你原代码中
find的搜索范围只限定到行的前vecx.size()个元素,也不符合“判断整行是否包含vecx子序列”的需求。
修复方案
你要实现的“查找一维vector中是否包含另一个一维vector作为连续子序列”的功能,应该用标准库的std::search接口,修改对应逻辑段即可:
#include <bits/stdc++.h> using namespace std; int main() { vector<vector<int>> vec; for(int i=0;i<10;i++) { vector<int> veck; for(int j=0;j<10;j++) if(j==5) veck.emplace_back(5); else veck.emplace_back(i); vec.emplace_back(veck); } for(auto i:vec){ for(auto j:i) cout<<j<<" "; cout<<"\n"; } //------------------------------- vector<int> vecx(5,4); vecx.emplace_back(5); for(auto &i : vec) // 加&避免行拷贝,属于可选性能优化 { // 使用search接口查找连续子序列 auto itr = search(i.begin(), i.end(), vecx.begin(), vecx.end()); if(itr != i.end()) cout << "YES" << endl; } }
运行说明
你当前构造的测试用例中,vec的每一行都是5个i、1个5、4个i,vecx是5个4加1个5,只有i=4的行才会匹配,运行后只会输出一次YES,符合逻辑预期。
内容的提问来源于stack exchange,提问作者Zero
相关产品推荐
相关产品推荐

