STL list 를 인자로 받는 함수에 대한 질문입니다.
글쓴이: wjdtlsckfu / 작성시간: 월, 2013/11/25 - 6:47오전
안녕하세요.list 를 쓰는데 잘 모르겠는 부분이 있어서 질문합니다.
list를 인자로 받는 함수를 만들고 싶은데요 , 복사해서 넘겨받는것이 아니라 레퍼런스로 받고싶습니다. 함수안에서 처리할 내용은 리스트에 저장된 값들을 swap하고 list의 마지막 값을 지우는 함수입니다.
void swap(list<int>::iterator it1) { list<int>::iterator it2=it1; int temp; it1++; temp=(*it1); (*it1)=(*it2); (*it2)=temp; } int slide(list<int>::iterator it,list<int>::iterator copy) { int last; for(;it!=(--((*copy).end()));it++) swap(it); last=*(--((*copy).end())); copy->pop_back(); return last; } int main() { x=slide(xp.begin(),xp.begin()); }
(main 함수는 일부만 가져왔습니다.)
이렇게 하고 싶은 이유는 list 가 가진 함수들을 쓰고 싶어서 입니다.end() 같은거요. 일단은 컴파일 오류가 났기때문에 slide 함수 내부가 어떻게 돌아가려는지는 잘 모르겠지만 , list를 가르키는 포인터를 써야하나.. 아 list는 처음이라 잘 모르겠습니다.
list1.end() list1.begin() 이 리턴하는 값은 이터레이터 타입인가요 ?
이터레이터만 넘겨받아서 list가 가진 함수들을 쓸수 있나요 ?
답변부탁드립니다. 감사합니다.
Forums:
간단히..
이터레이터는 말 그대로 값을 훑어보기 위해 존재하는 것이고 본체의 기능을 쓸 수는 없습니다. 값을 쓰거나 앞뒤로 왔다갔다 하는 등의 일만 하게 됩니다. end, begin 등의 함수가 이터레이터를 리턴하는게 맞습니다.
리스트 자체를 레퍼런스로 받고 싶으시면 함수 인자를 해당 리스트의 레퍼런스로 선언하시면 됩니다. 이터레이터 말고요. 그래야 list의 메서드들을 쓸 수 있습니다.
참고로 맨 위에 스왑 함수의 경우는 이름대로라면 인자를 두 개를 받는 편이 나을 듯 하고요 (꼭 그래야 하는 건 아니지만), 함수 본체에 이터레이터가 제대로 된 곳을 가리키고 있는지를 검사하는 루틴이 빠져 있습니다.
그런데 원하시는 동작이 어떤것인가요? 순서를 아예 거꾸로 뒤집으시려면 reverse라는 메서드가 이미 존재하고.. 맨 앞이나 뒤 값을 자르는건 그냥 그 값들만 자르면 되는데.. 왜 저렇게 전체 엔트리를 다 만져야 하는지 이해가 되지 않습니다. 혹시 전체적으로 뒤집는게 아니고 한쌍씩만 뒤집는 건가요? 2,1,4,3, ... 이런식인지요. 저런거라면 다른 자료구조를 쓰시는게 더 간편할듯 합니다. 어레이라든지..
--
댓글 달기