0
내가하고 싶은 것은 단일 링크 된 목록의 마지막 요소를 k 번째로 찾는 것이다. I 아래 순환 용액이 다음 main() 함수에서 를, I는 I 목록을 작성한 후,이 test_func 전화 1반복자가 끝에서 멈출 수 없다. (C++)
int main()
{
int i;
forward_list<int> flist;
for (i = 1; i <= 10; i ++)
flist.push_front(i);
forward_list<int>::iterator iter;
cout << "Original Sequence:" << endl;
for (iter = flist.begin(); iter != flist.end(); iter ++)
cout << *iter << " ";
cout << endl;
forward_list<int>::iterator end = flist.end();
forward_list<int>::iterator begin = flist.begin();
forward_list<int>::iterator ret;
ret = test_func(begin, end);
cout << "The " << TARGET << "th(st,nd,rd) to last element is " << *ret << endl;
return 0;
}
에 번호 10 채리스트를 생성한다. 반환 값은 내가 원하는 요소의 반복자 여야합니다.
#define TARGET 3
static int counttt = 0;
forward_list<int>::iterator test_func(forward_list<int>::iterator iter, forward_list<int>::iterator end)
{
cout << "test..." << endl;
forward_list<int>::iterator temp;
if ((iter ++) != end)
temp = test_func(iter, end);
counttt ++;
if (counttt < TARGET)
return end;
else if (counttt == TARGET)
return iter;
else
return temp;
}
"test ..."는 test_func()가 호출 된 횟수를 알려주는 디버깅을위한 것입니다. 여기, 제 생각에는 test_func()를 10 번 호출해야합니다. 그러나 11 회 전화가 걸리며 마지막으로 세그먼트 오류가 발생합니다. 적절한시기에 (iter ++)! = end)이 발생하지 않습니다.
모든 코드는 다음과 같습니다
#include <forward_list>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
using namespace std;
#define TARGET 3
static int counttt = 0;
forward_list<int>::iterator test_func(forward_list<int>::iterator iter, forward_list<int>::iterator end)
{
cout << "test..." << endl;
forward_list<int>::iterator temp;
if ((iter ++) != end)
temp = test_func(iter, end);
counttt ++;
if (counttt < TARGET)
return end;
else if (counttt == TARGET)
return iter;
else
return temp;
}
int main()
{
int i;
forward_list<int> flist;
for (i = 1; i <= 10; i ++)
flist.push_front(i);
forward_list<int>::iterator iter;
cout << "Original Sequence:" << endl;
for (iter = flist.begin(); iter != flist.end(); iter ++)
cout << *iter << " ";
cout << endl;
forward_list<int>::iterator end = flist.end();
forward_list<int>::iterator begin = flist.begin();
forward_list<int>::iterator ret;
ret = test_func(begin, end);
cout << "The " << TARGET << "th(st,nd,rd) to last element is " << *ret << endl;
return 0;
}
감사합니다,
케빈 저우
정말 고마워요! 또 다른 질문이 있습니다. 이 예에서는 forward_list 만 인수로 사용합니다. 좀 더 일반화 할 수 있을까요? 목록에있는 데이터는 내가 알지 못하는 다른 데이터 구조 일 수 있습니다. –