어떤 상황에서 다른 STL 컨테이너 위에 로프를 사용하게 될지 궁금합니다.STL 로프 - 사용 장소 및 시간
답변
로프는 확장 문자열 구현 있습니다 : 그들은 전체 문자열을 포함 효율적인 운영을 위해 설계되었습니다. 할당, 연결 및 하위 문자열과 같은 작업은 문자열의 길이에 관계없이 거의 시간이 걸립니다. C 문자열과는 달리 로프는 편집 버퍼 또는 메일 메시지와 같이 매우 긴 문자열 ( )을 합리적으로 표시합니다.
장점 : 긴 문자열을 포함하는
훨씬 빠른 연결 및 문자열 작업. 예를 들어, 원본의 사본이 보관되는 경우에도 10 메가 바이트 로프의 중간에 문자를 삽입하면 은 마이크로 초의 10 초를 넘어야합니다. 편집 기록의 일부로 대조적으로, 이것은 에 대한 초 단위로 나타납니다 종래의 "플랫"문자열 표현. 연결에 필요한 시간은 대부분의 응용 프로그램에서 일정한 숫자 인 으로 볼 수 있습니다. 텍스트 편집기 안에 파일 표현으로 로프를 사용하는 것이 가장 합리적입니다.
잠재적으로 더 나은 공간 성능. 로프의 사소한 수정은 원본과 메모리를 공유 할 수 있습니다. 로프는 크게 메모리를
할당 단순히 (아마도 레퍼런스 카운트) 포인터 할당인지 큰 블록
도입 단편화의 문제를 감소 작은 청크에 할당된다. 참조 계산 된 copy-on-write 구현과 달리, 복사본 중 하나가 나중에 약간 수정 된 인 경우에도 대부분 으로 유지됩니다. 검사 점에 매우 저렴한 입니다. 문자열의 버전입니다 (예 : 편집에서 기록입니다.문자를 생산하는 로프로 볼 수 있습니다. 따라서 로프 조각은 문자열의 섹션을 검사 할 때 읽기 전용 인 100MByte 파일 일 수 있습니다. 의 끝에 문자열을 연결하면 해당 파일에 을 읽지 않습니다. (현재이 시설의 구현은 불완전합니다.)
큰 데이터 크기를 처리하는 string
의 비표준 대안입니다. 작동 방식은 here을 참조하십시오.
난 전혀 사용하지,하지만 내가 "쉽게 휴대"괴물의 비트 해요, 그리고 늪지 표준 컨테이너를 사용하는 경우에만 경향이 있기 때문입니다. 로프는 SGI의 STL 구현의 일부이며 C++ 표준의 일부가 아닙니다.
로프의 유일한 나쁜 점은 스레드와 오용입니다.
Linux (및 대부분의 다른 OS)에서는 스레드 안전 코드가 로프를 너무 느리게 만드는 이유입니다. 그래서 임베디드 플랫폼에서 단일 스레드를 사용하기 때문에이 코드를 찢어 버리십시오 (컴파일러 def를 threads-off).
그렇지 않으면 로프가 문자열보다 훨씬 빠르며 큰 버퍼에서 메모리가 부족해질 가능성이 적고 큰 버퍼를 편집하는 데 훨씬 빠릅니다. 성경 중간에 나쁜 성격을 제거하는 것.
이것은 로프가 데이터로 해석되는 방식 때문입니다. 조금 더 작은 '문자열'이 링크 된 목록을 통해 함께 묶여 최종 문자열을 생성합니다.
"로프는 문자열보다 훨씬 빠릅니다": 모든 작업이 아닙니다. 로프의 문자를 색인으로 검색하는 것은 문자열보다 로프보다 빠릅니다. –
@Alexandre,하지만 이것은 std :: string의 경우에도 *** 나쁜 습관입니다. 이 경우 문자의 벡터를 사용하는 것이 훨씬 좋습니다. – unixman83
C++ 0x 문자열은 연속적으로 문자를 저장할 수 있으므로 더 이상 나쁜 관행이 아닙니다. –
문자로 구성된 문자열에는 많은 강조점이 있지만 로프는 빠른 삽입 및 삭제 (시퀀스 내의 모든 위치)가있는 단순한 1D 시퀀스입니다.
문자열과 같은 다른 기능에는 이러한 기본 기능이 거의 필요하지 않습니다. 정수 로프는 어디에서 사용합니까? 모르겠다. 조작을 위해서는 어딘가에서 색인이 필요하기 때문이다.
현실적인 인위적인 사례는 사용자가 수천 개의 이미지로 구성된 데이터 세트를 볼 수있게 해주는 UI를 만드는 것이고 사용자는 그 중 일부를 삭제하고 순서를 재 배열 할 수 있어야합니다. 다른 사람들의
텍스트 편집기는 로프 데이터 구조의 유용성에 대한 실용적인 예제가 아닙니다. – JJF
- 1. STL 벡터와 함께 STL 할당 자 사용
- 2. VS2008의 STL 포트 사용
- 3. ATL에서 STL 사용
- 4. 아이폰 앱에서 가장 좋은 시간/장소
- 5. STL 알고리즘에서 로컬 클래스 사용
- 6. STL 사용 중 세그먼트 오류
- 7. STL 알고리즘 및 const_iterators
- 8. 템플릿 및 STL 컨테이너
- 9. CUDA 및 STL 벡터
- 10. Facebook 장소 그래프 API
- 11. 스프링 로프 - 스프링 서핑 설치 방법
- 12. Google지도보기 android app에 "내 장소"지도 사용
- 13. GWT 활동 및 장소 및 SEO
- 14. 오른쪽 장소?
- 15. C++ 및 STL : 생성자 팩터
- 16. STL 벡터 및 스레드 안전
- 17. OpenCV, Matlab 및 STL 컨테이너
- 18. STL 문자열 및 STL 벡터를 void *로 변환합니까?
- 19. STL 스레드 안전 및 STL 디버깅에 대한 질문
- 20. stl :지도 및 대칭 데이터 액세스
- 21. mod_rewrite를 장소
- 22. PHP와 장소
- 23. 장소 UISegmentedControl
- 24. 평가 장소
- 25. .stl 파일에서 STL (stereolithography) 개체의 치수 계산
- 26. MVP 또는 GWT 2.2의 활동 및 장소
- 27. 텍스트보기 및 이미지보기 바람직한 장소 추가
- 28. stl 목록 - 복잡성
- 29. 세션 시간 초과 및 페이지 응답 시간
- 30. 벤치마킹에 시간 명령 사용
나는 로프에 대해 들어 본 적이 없다 - 표준인가? – CiscoIPPhone
@Neil (및 기타)이 지적했듯이 이것은 표준의 일부가 아니며 SGI 라이브러리의 일부인 추가 컨테이너입니다. – Konrad
파이어 폭스가 '목록'을 어떻게 구현하는지 궁금하게 생각하면서 비슷한 동물에 대해 생각해 보았습니다. 나는 그들이 빠른 삽입/지울 수 있도록 비슷한 기술을 사용한다고 생각한다. –