STL list 를 인자로 받는 함수에 대한 질문입니다.

wjdtlsckfu의 이미지

안녕하세요.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가 가진 함수들을 쓸수 있나요 ?
답변부탁드립니다. 감사합니다.

mirheekl의 이미지

이터레이터는 말 그대로 값을 훑어보기 위해 존재하는 것이고 본체의 기능을 쓸 수는 없습니다. 값을 쓰거나 앞뒤로 왔다갔다 하는 등의 일만 하게 됩니다. end, begin 등의 함수가 이터레이터를 리턴하는게 맞습니다.

리스트 자체를 레퍼런스로 받고 싶으시면 함수 인자를 해당 리스트의 레퍼런스로 선언하시면 됩니다. 이터레이터 말고요. 그래야 list의 메서드들을 쓸 수 있습니다.

참고로 맨 위에 스왑 함수의 경우는 이름대로라면 인자를 두 개를 받는 편이 나을 듯 하고요 (꼭 그래야 하는 건 아니지만), 함수 본체에 이터레이터가 제대로 된 곳을 가리키고 있는지를 검사하는 루틴이 빠져 있습니다.

그런데 원하시는 동작이 어떤것인가요? 순서를 아예 거꾸로 뒤집으시려면 reverse라는 메서드가 이미 존재하고.. 맨 앞이나 뒤 값을 자르는건 그냥 그 값들만 자르면 되는데.. 왜 저렇게 전체 엔트리를 다 만져야 하는지 이해가 되지 않습니다. 혹시 전체적으로 뒤집는게 아니고 한쌍씩만 뒤집는 건가요? 2,1,4,3, ... 이런식인지요. 저런거라면 다른 자료구조를 쓰시는게 더 간편할듯 합니다. 어레이라든지..

--

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.