2011-03-16 6 views
0

나는 std :: string을 가지고 있고 x와 x ​​+ y의 문자 만 필요로한다. 만약 내가 어떻게 든 할 수 있다면 (char *) & string [ x]하지만 문제는 모든 함수가 NULL로 끝나는 문자열을 기대하기 때문입니다.하위 문자열을 가져 오지 않으십니까?

어떻게해야합니까?

감사

+2

하위 문자열을 만드는 것이 응용 프로그램의 주요 성능 문제인지 확인하기 위해 프로파일 링을 수행 했습니까? – dreamlax

+1

제발, 왜 모두가 항상 STL을 최적화하려고합니까? 그것이 컴파일러의 임무입니다. – orlp

+0

코어 i7이있는 저렴한 Dell 제품입니다. SiSoft Sandra는 17GB/s의 메모리 대역폭을보고합니다. 하위 문자열을 복사하는 데 얼마나 오래 걸릴 수 있습니까? –

답변

3

좋은 것은 없습니다. 내가 생각할 수있는 유일한 트릭은 s[x+y+1]을 일시적으로 0으로 설정하고 &s[x]을 전달한 다음 문자를 복원하는 것입니다. 그러나 이것이 성능을 합리적으로 향상시키고 부스트가 필요하다고 확신하는 경우에만 이것에 의존해야합니다.

+0

+1 - 너는 12 초 만에 나를 때려. –

0

사용 : 이것은 당신이 0-종료를 실제 필요한 경우 기능을 사용하면 복사해야하는 const char *

소요 가정

string.c_str() + x; 

.

1

아무 것도 없습니다 (필요한 문자열이 중간에있는 경우). 속도 차이는 끝나지 않는 한 완전히 사소 할 것입니다. (수 백만)

0

당신은 선택의 여지가 없습니다. 원래 문자열을 복사하거나 수정하지 않고는 null로 끝나는 하위 문자열을 만들 수 없습니다.

당신은 "속도가 빨라질 것이라고 생각합니다."라고 말합니다. 측정 했니?

0

은 NUL과 함께 &string[x+y+1]을 덮어 쓰고 기능에 &string[x]을 전달합니다. 이후에 전체 문자열을 다시 필요로하는 경우 해당 기간 동안 저장하고 필요할 때 복원 할 수 있습니다.

관련 문제