좋아 .. 먼저이 질문이 요구하는 것을 수행하는 것이 필요했지만 빨리 필요했습니다! 불행히도 "더 나은"방법은 거의 600 줄의 코드입니다 !!! 그것이하는 일과 관련이없는 그것의 이름을 용서하십시오. 적절한 이름은 Integer64ToCharArray (int64_t value);
https://github.com/JeremyDX/All-Language-Testing-Code/blob/master/C%2B%2B%20Examples/IntegerToCharArrayTesting.cpp
성능을 방해하지 않고 코드를 정리해보십시오.
입력 : 최소에서 최대 범위까지의 부호있는 64 비트 값.
예:
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MAX) << '\n';
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MIN) << '\n';
산출:
Test: 9223372036854775807
Test: -9223372036854775808
원래 속도 테스트 : ( Integer64ToCharArray (); )
최상의 경우 1 자리 값입니다.
루프 : 100,000,000, 소요 시간 : 1,381 (밀리), 루프 당 시간 13 (나노)
최악의 경우 20 자리 값.
루프 : 100,000,000, 소요 시간 : 22,656 (밀리), 루프 당 시간 226 (나노
새로운 설계 속도 테스트 : ( AddDynamicallyToBuffer (); )
최상의 경우 1 자리 값입니다.
루프 : 100,000,000, 소요 시간 : 427 (밀리), 루프 당 시간 4 (나노)
32 비트 최악의 경우-11 자리 값.
루프 : 100,000,000, 소요 시간 : 1,991 (밀리), 루프 당 시간 19 (나노)
음수 1 조 최악의 경우-14 자리 값.
루프 : 100,000,000, 소요 시간 : 5,681 (밀리), 루프 당 시간 56 (나노)
64 비트 최악의 경우-20 자리 값.
루프 : 100,000,000, 소요 시간 : 13,148 (밀리), 루프 당 시간 131 (나노)
작동 원리!
Divide and Conquer 기술을 수행하고 이제 문자열의 최대 길이가되면 각 문자 값을 개별적으로 설정하기 만하면됩니다. 위의 속도 테스트에서 볼 수 있듯이 길이가 길수록 성능이 크게 저하되지만 원래 루프 방법보다 훨씬 빠르며 루프가 더 이상 사용되지 않는 두 방법간에 코드가 실제로 변경되지 않았습니다.
내 사용법에서는 대신 오프셋을 반환하고 char 배열의 버퍼를 편집하지 않고 정점 데이터 업데이트를 시작하고 함수에는 오프셋에 대한 추가 매개 변수가 있으므로 -1로 초기화되지 않습니다.