vector<T> data; vector<T>* ptr = &data;
과 같이 정의할때, data 의 원소를 ptr 로 참조할 수 있는 방법이 아래와 같이 두가지가 있는데요.
ptr->at(x) (*ptr)[x]
속도는 at을 쓰지 않은쪽이 빠를겁니다.
at은 범위체크를 하고 []는 범위 체크를 안할겁니다.
http://www.cplusplus.com/reference/stl/vector/at/
참고 하세요.
----------------------- 과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라. 그리고 내일을 알고 싶으냐? 그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라. ----------------------- 내가 쓰는 글은 틀릴 수 있습니다.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동 "만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
답변 감사드립니다.
그럼, 범위 체크를 제외하면 완전히 동일한 기능이라고 봐도 괜찮은지요?
다시 말해, ptr-> 와 (*ptr). 의 차이가 있느냐 하는 것입니다.
Leo.
아.....map하고 착각하고 답달았네요.ㅎㅎ 수정합니다.
아마 기능적으로 별차이 없을것같네요..
포인터 변수를 가지고 있을 때, 그 포인터 값으로부터 포인터가 가리키고 있는 메모리 공간의 값을 꺼내는 것을 dereference라고 합니다.
ptr->이든 *ptr이든 차이가 없습니다. 제대로 된 컴파일러라면 포인터를 가지고 dereference하는 assembly code를 만들어낼 때 다르지 않게 만들어내겠죠.
struct _test { int a; char str[10]; } test = { 3, "hello" }; struct _test* ptr = &test;
아래 두 코드를 각각 gcc로 컴파일해보면 동일한 assembly code를 만들어 냅니다. (c/c++ 마찬가지)
printf("%d %s\n", ptr->a, ptr->str);
printf("%d %s\n", (*ptr).a, (*ptr).str);
제가 구하던 답이었습니다. :)
텍스트 포맷에 대한 자세한 정보
<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]
속도는 at을 쓰지
속도는 at을 쓰지 않은쪽이 빠를겁니다.
at은 범위체크를 하고 []는 범위 체크를 안할겁니다.
http://www.cplusplus.com/reference/stl/vector/at/
참고 하세요.
-----------------------
과거를 알고 싶거든 오늘의 네 모습을 보아라. 그것이 과거의 너니라.
그리고 내일을 알고 싶으냐? 그러면 오늘의 너를 보아라. 그것이 바로 미래의 너니라.
-----------------------
내가 쓰는 글은 틀릴 수 있습니다.
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
감사합니다.
답변 감사드립니다.
그럼, 범위 체크를 제외하면 완전히 동일한 기능이라고 봐도 괜찮은지요?
다시 말해, ptr-> 와 (*ptr). 의 차이가 있느냐 하는 것입니다.
Leo.
기능이야 같겠지만
아.....map하고 착각하고 답달았네요.ㅎㅎ 수정합니다.
아마 기능적으로 별차이 없을것같네요..
포인터 변수를
포인터 변수를 가지고 있을 때, 그 포인터 값으로부터 포인터가 가리키고 있는 메모리 공간의 값을 꺼내는 것을 dereference라고 합니다.
ptr->이든 *ptr이든 차이가 없습니다. 제대로 된 컴파일러라면 포인터를 가지고 dereference하는 assembly code를 만들어낼 때 다르지 않게 만들어내겠죠.
아래 두 코드를 각각 gcc로 컴파일해보면 동일한 assembly code를 만들어 냅니다. (c/c++ 마찬가지)
printf("%d %s\n", ptr->a, ptr->str);
printf("%d %s\n", (*ptr).a, (*ptr).str);
감사합니다.
제가 구하던 답이었습니다. :)
Leo.
댓글 달기