문제

글로벌 범위에 MyObjects의 벡터가 있습니다.

std::vector<myObject>

메소드는 벡터의 요소 중 하나에 대한 포인터가 전달됩니다. 이 메소드가 포인터를 증가시키고 다음 요소에 도달 할 수 있습니까?

myObject* pmObj;

++pmObj; // the next element ??

또는 통과해야합니다 std::Vector<myObject>::iterator 그리고 대신 그것을 증가 시켰습니까?

지금은 벡터가 그 동안 변경되지 않을 것이라고 가정합니다.

도움이 되었습니까?

해결책

예 - 표준은 벡터의 저장소가 인접 해 있음을 기술 보정의 보장하므로 포인터를 벡터로 증가시킵니다.

다른 팁

예, 이것은 예상대로 작동합니다 std::vector 표준에 따라 연속 스토리지를 사용하도록 요구됩니다. 다양한 객체로 작업하는 경우 한 쌍의 반복자를 통과하는 것이 좋습니다. 이것은 STL이 사용하는 표준 관용구입니다. 이것은 카운트 나 그와 비슷한 것에 의존하는 대신 반복에 대한 명백한 엔드 포인트가 있기 때문에 코드를 조금 더 안전하게 만듭니다.

벡터가 재 할당되지 않고 벡터의 경계에서 벗어나지 않으면이 접근법을 사용할 수 있습니다. 포인터를 증가시키는 것은 합법적이며 다음 요소로 이동할 공간이 있지만 벡터의 버퍼가 단일 메모리 블록이므로 포인터를 증가 시켜서 그렇게 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top