반응형
목록에서 두 번째 요소를 어떻게 얻을 수 있습니까?
나는 std::list<double> foo;
나는 사용하고있다
if (foo.size() >= 2){
double penultimate = *(--foo.rbegin());
}
그러나 이것은 항상 나에게 임의의 값을 제공 penultimate
합니다.
내가 도대체 뭘 잘못하고있는 겁니까?
감소하는 대신 다음 rbegin
과 같이 증가시켜야합니다. 1
double penultimate = *++foo.rbegin();
as rbegin()
는 역방향 반복자 를 반환 하므로 ++
연산자도 컨테이너에서 뒤로 이동합니다. 불필요한 괄호도 삭제했습니다. 모든 사람의 취향이 아닙니다.
현재 프로그램의 동작 은 실제로로 이동하고 있기 때문에 정의되지 않았 으며 end()
이를 역 참조 할 수 없습니다. 출력의 임의적 특성은 정의되지 않은 동작의 표현입니다.
1 현재 가지고있는 최소 크기 검사를 유지하십시오.
내 생각에 가장 명확한 방법은이 목적을 위해 설계된 구조를 사용하는 것입니다 (C ++ 11).
double penultimate = *std::prev(foo.end(), 2)
나는 그냥 할 것이다 *--(--foo.end())
; 역 반복자가 필요하지 않습니다. 또한 덜 혼란 스럽습니다.
참고 URL : https://stackoverflow.com/questions/44206521/how-can-i-get-the-penultimate-element-in-a-list
반응형
'code' 카테고리의 다른 글
objdump를 사용하여 하나의 단일 함수를 분해하는 방법은 무엇입니까? (0) | 2020.11.05 |
---|---|
C ++ 14의 Lambda-Over-Lambda (0) | 2020.11.05 |
다양한 RAISERROR 심각도 수준은 무엇을 의미합니까? (0) | 2020.11.05 |
멀티 태스킹, 멀티 스레딩 및 멀티 프로세싱의 차이점은 무엇입니까? (0) | 2020.11.04 |
주석을 통해 Hibernate UUIDGenerator 사용 (0) | 2020.11.04 |