디자인 문제가 발생했습니다. 크기 10000의 거대한 std::vector<int>
라고 O
말은 유형 Foo
, f_1
... f_n
두 가지 많은 개체가 있습니다. 각 Foo
에는 O
의 하위 주문 인 std::vector<int>
내부가 있습니다. 예를 들어컨테이너의 참조를 사용하여 포인터의 참조 해제 오버 헤드를 방지하려면 어떻게해야합니까?
O = 1, 2, ..., 100000
f_1.order = 1, 2, 3
f_2.order = 1, 4, 16
f_3.order = 100, 101, 102
// ...
주요 요건은 f_n
그 값을 변경할 때 O
의 해당 값을 업데이트한다. 모든 Foo
개체의 길이와 내용은 작성시 알고 있으며 수명 동안 변경되지 않아야합니다. 예를 들어, f_1
에는 O
의 첫 번째, 두 번째 및 세 번째 요소가 들어있는 것으로 알려져 있습니다.
명백한 해결책은 물론 포인터를 사용하는 것입니다. Foo
은 각 요소가 원래 순서 (O
)의 기본 데이터를 가리키는 std::vector<int*>
을 보유 할 수 있습니다. 한편
Foo
개체를 사용하여 몇 가지 무거운 계산을 할. 그래서 포인터 역 참조의 오버 헤드를 제거하는 방법을 찾고 있습니다. 설계가
std::vector<int&>
일종의 사용을 허용한다면 좋겠지 만,
vector<T>
이 존재해야하기 때문에
T*
이 존재합니다.
동료
는boost::ptr_vector
를 사용하도록 제안. 코드를 최적화하지 않습니다 당신이 문제가 알기도 전에 - 또 다른이 충분히 강조되지 않을 수
포인터 역 참조 중 오버 헤드가 있습니까? 정말? –
(1) 컨테이너에서 사용자 참조를 할 수 없습니다. (2) 참조는 포인터의 참조 오버 헤드와 동일합니다. –
Ouh ... 좋은 댓글을 준비하십시오. ;) –