C++ 搜索算法向量迭代器不可解引用c++;
我刚刚复制了“搜索”查找子序列的算法 看起来是这样的:C++ 搜索算法向量迭代器不可解引用c++;,c++,algorithm,iterator,C++,Algorithm,Iterator,我刚刚复制了“搜索”查找子序列的算法 看起来是这样的: template<class ForwardIterator1, class ForwardIterator2> ForwardIterator1 search ( ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2) { i
template<class ForwardIterator1, class ForwardIterator2>
ForwardIterator1 search ( ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2)
{
if (first2==last2) return first1; // specified in C++11
while (first1!=last1)
{
ForwardIterator1 it1 = first1;
ForwardIterator2 it2 = first2;
while (*it1==*it2) { // or: while (pred(*it1,*it2)) for version 2
if (it2==last2) return first1;
if (it1==last1) return last1;
++it1; ++it2;
}
++first1;
}
return last1;
}
模板
ForwardIterator1搜索(ForwardIterator1 first1,ForwardIterator1 last1,
ForwardIterator2 first2,ForwardIterator2 last2)
{
if(first2==last2)返回first1;//在C++11中指定
while(first1!=last1)
{
ForwardIterator1 it1=first1;
ForwardIterator2IT2=first2;
while(*it1==*it2){//or:while(pred(*it1,*it2))用于版本2
if(it2==last2)返回first1;
if(it1==last1)返回last1;
++it1;++it2;
}
++第一个1;
}
返回last1;
}
我曾尝试在visual studio中使用此算法,但在调试结束时,该算法崩溃,出现以下调试错误:
向量迭代器不可解引用
我启动一些向量的代码是:
vector<int> v1 = { 1,4,7,10,5,0};
vector<int>v2 = {10,5,0};
vector<int>::iterator it = cpp_search(v1.begin(), v1.end(), v2.begin(), v2.end());
向量v1={1,4,7,10,5,0};
向量v2={10,5,0};
向量::迭代器it=cpp_搜索(v1.begin(),v1.end(),v2.begin(),v2.end());
有什么问题吗?当
循环取消引用两个迭代器时,条件中的代码会测试这些迭代器是否超出各自的范围。那是错误的;如果任何一个迭代器都结束了,它不是可撤销的。您应该考虑使用更好的引用:只对“代码”说“不”。http://www.cplusplus.com
;这是垃圾。你得到了一个指向一篇文章的链接,该文章展示了正确的实现。在什么方面它不能满足你的需求?确保它们不等于最后一个