stl의 문자열 클래스가 변경 가능합니까? 문자열의 문자를 정수로 변환하는 데 드는 비용은 무엇입니까?문자열의 문자 교체 비용은?
답변
1) 예, 변경할 수 있습니다. 연산자 [] 및 at()은 모두 문자에 대한 const가 아닌 참조를 반환하며 바운드 검사를 원할 경우 name[7] = 'X'
또는 name.at(7) = 'X'
과 같이 왼쪽에서 사용할 수 있습니다.
2) 한 문자를 변경하는 데 드는 비용이 매우 낮습니다. C 문자열과 매우 비슷하거나 비슷합니다 (범위 검사의 비용에는 at()
이 추가되었습니다). 표준에서 요구하지는 않지만 std :: string 메모리의 연속 블록에 문자열을 저장합니다 (Meyers가 올바르게 기억되는 경우). 따라서 문자를 일정 위치로 변경하면 일정 시간이됩니다.
일반적으로 널리 사용되는 문자열 조작의 복사 및 내부 버전을 제공하는 boost string algorithms도 참조하십시오.
예.
문자를 찾는 선형 (그러나 색인을 이미 알고 있다면 상수 임). 귀하의 질문에 대한 실제적인 의미는 일정한 시간을 의미합니다. 대체 점은 정수의 문자열 표현을 실제로 의미하는 경우 대체 점 뒤의 문자 수에서 선형입니다.
예, std::string
의 내용을 수정할 수 있습니다. std::string::operator[]
등을 사용
:
std::string str("foo");
str[0] = 'b';
std::cout << str << std::endl;
가 출력 "boo"
.
단일 문자를 교체하는 데 드는 비용은 플랫폼에서 해당 메모리 위치 비용으로 캐릭터를 복사하는 것입니다. 아마별로.
예, 변경할 수 있습니다. 당신이 뭔가를 의미하는 경우
:
std::string s("space\n");
int i = 'i';
s[2] = (char)i;
std::cout << s; // prints 'spice'
자세한 구현 정의하지만, 세 번째 줄은 일반적으로 구성
- 로드 문자열에서 포인터 값을 그것에 색인을 붙이십시오
- 그 주소에 바이트 상점을 실행하십시오
그래서 값이 쌉니다. 디버그 모드에서 범위 검사 등이있을 수 있으며 거기에는 다른 코드가있을 수 있지만 위의 내용은 기본적으로 수행해야하는 작업입니다.
- 1. 문자열의 마지막 문자 교체
- 2. 문자열의 중간에서 문자 교체
- 3. 문자열의 교체
- 4. PostgreSQL 문자열 문자 교체
- 5. jquery로 문자 교체
- 6. PHP - 보안 문자 교체
- 7. 정규식 - 숫자 문자열의 교체 부분
- 8. python : 문자열의 특수 문자 바꾸기
- 9. 표준 : : 문자열의 문자 참조
- 10. xslt 문자열의 특수 문자
- 11. 문자열의 최대 문자 수
- 12. 문자열의 특수 문자 수정
- 13. 문자열의 문자 수 표시
- 14. 문자열의 반복 문자 테스트
- 15. 루아에서 문자열의 문자 수정하기
- 16. 문자열의 16 진수 문자
- 17. Ada에서 문자열의 문자 찾기
- 18. Ruby에서 문자열의 문자 찾기
- 19. 문자열의 문자 비교 알고리즘
- 20. 파이썬 : 주어진 문자열의 임의의 문자
- 21. 문자열의 유니 코드 문자 - iphone
- 22. JavaScript - 문자열의 소문자 문자 확인
- 23. utf8 문자열의 latin1 문자 감지
- 24. 문자열의 html 문자 엔티티 바꾸기
- 25. 파이썬에서 문자열의 한 문자 바꾸기
- 26. 문자열의 특정 문자 만 허용합니다.
- 27. C 문자열의 특정 문자 확인
- 28. 문자열의 첫 번째 문자 확인
- 29. 교체 전 세계적으로 분음 부호 문자
- 30. 유니 코드 허용시 특정 문자 교체 (PHP)
스펙은 내부 표현이 연속적 일 것을 요구하지 않지만 _does_는'at'와'operator []'둘 다 일정 시간이 필요합니다. – Nemo
C++ 0x에서 인접성은'std :: string' 구현에 대한 요구 사항이됩니다. – pmr
굉장해! Nemo와 pmr에게 감사드립니다! – olooney