Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 搜索算法向量迭代器不可解引用c++;_C++_Algorithm_Iterator - Fatal编程技术网

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
;这是垃圾。你得到了一个指向一篇文章的链接,该文章展示了正确的实现。在什么方面它不能满足你的需求?确保它们不等于最后一个