std::list<data_type> nlist1;
이렇게 list 자료구조로 nlist1 선언하고 값을 넣은 후에.
std::list<data_type>::literator lter_list =std::prev(nlist1.begin());
이렇게 코드작성하면 무조건 오류걸리는 거지???
list 구조에서 맨앞에 prev에 위치하는 element가 없기 때문인걸로 알고 있는데. 내가 맞는건지 궁금함.
nlist 1 : [begin] <->[begin+1]<-> [begin+2]<-> ... <->[end-1]<-> [end]
prev<-> [begin+1] <->next
[begin+1]의 prev = [begin] , next = [begin+2]
[begin]의 prev는 존재 x 하므로 위 코드 작성시 오류 발생하는거 맞지?
어떤 경우에도 오류가 발생하는 거지??
begin앞에 prev element는 없으니깐!!
6개의 댓글
무분별한 사용은 차단될 수 있습니다.
느그본체만수무강
구현 방식에 따라 다를것 같은데 따로 처리를 안해줬을 것 같음.
아임니더
따로 처리를 안 해줬다는게 무슨말임??
비주얼스튜디오 2019에서 사용하고, list.h에서 가져온 list template libarary인데.
환경에 따라서 다르려나?
느그본체만수무강
컴파일러마다 구현 방식이 조금씩 다를 수 있음.
STL이 어느 컴파일러나 동일한 코드로 만드는게 아닌걸로 알고 있음.
다만 그럼에도 저 부분은 처리가 안 되어 있을 경우를 상정하여 무조건 문제가 발생한다고 생각하고 반드시 예외처리를 해줘야 한다는 거임.
아임니더
컴파일러 마다 다르게 구현될 수 있다니 신기하네.
Standard Template Libaray라는 명칭인데, 컴파일러마다 다를줄이야... 답변기다리는 동안 좀더 찾아봐야겠구만..
ㅇ답변고마워고
a1s2d3f4g5
표준은 함수 이름이랑 파라미터 타입같은거만 펴준이고 이상한짓하면 다 다르게동작함
냥드립퍼
그런 Undefined Behavior(UB)은 오류를 뿜을 수도 있고, 뭔가 작동은 하는데 이상하게 작동할 수도 있음(가장 디버깅이 어려운 케이스).
그리고 이런 질문은 앵간하면 스택오버 플로우 한번 찾아보는게 훨씬 빠를걸.
https://stackoverflow.com/questions/37584646/validity-of-stdprev-and-stdnext-for-stdlist
https://stackoverflow.com/questions/25263676/is-it-safe-to-use-stdprevvector-begin-or-stdnextvector-begin-1-lik