2012-11-23 5 views
1

내 벡터 내용을 가져 오기 위해 연산자 []를 사용하더라도 벡터는 항상 size 함수를 호출합니다. (필자의 프로파일 링 도구와 시간 측정에 따라). 내 C++ 응용 프로그램은 매우 시간이 중요합니다 (0.1ms 미만), 나는 그것을 배열로 변환하는 것이 좋을 거라 생각했지만 지금까지는 알 수 없습니다.배열에서 벡터 <pair <double *, pair <double *, int * >>에서 C++ 로의 변환

std::vector<std::pair<double*,std::pair<double*,int*>>> 
+1

상황을 명확하게 파악하려면 지원 코드를 게시하십시오. –

+2

릴리스 빌드로 작업 하시겠습니까? (디버그 빌드가 제한을 검사 할 수 있습니다. 릴리스는 없어야합니다). 어떤 STL 구현을 사용하고 있습니까? – Philipp

+0

디버그 빌드 때문에 알지만 그걸로 작업해야합니다. –

답변

3

당신은이 같은 배열의 첫 번째 요소에 대한 포인터로 변환 할 수 있습니다 : 실제 벡터처럼 보이는

pair<double *, pair<double *, int *> > *ar = &v[0]; 

사용 v.data() 대신 &v[0] C++ 11.

관련성이 없기 때문에 나는 size() 기능이 측정 가능한 시간을 차지하고 있다는 것에 회의적입니다. 일반적으로 필드를 반환하거나 두 포인터 필드의 차이를 반환하는 인라인 함수입니다.

+0

내 고용주가 Visual Studio 2005를 사용하기를 원하기 때문에 나는 C++ 11을 사용하지 않는다. 2005 –

6

질문에 'visual-C++'태그가 붙어 있으므로이 컴파일러가 사용되고 있다고 가정합니다.

Microsoft의 C++ 표준 라이브러리 구현에는 정의되지 않은 동작이 발생하는 상황을 감지하고 대신 런타임 오류를 생성하는 다양한 검사가 포함되어 있습니다. 이러한 검사는 기본적으로 사용하도록 설정되어 있지만 (릴리스 빌드의 경우에도) _SECURE_SCL0으로 정의하여 사용 중지 할 수 있습니다. 자세한 내용은 here (MSDN)here을 참조하십시오.

+0

이제는 더 좋지만 여전히 vector :: size는 너무 많이 호출된다. 실제로 크기 값을 이미 처리했습니다. –

관련 문제