istringstream, ostringstream, stringstream의 차이점은 무엇입니까? / 모든 경우에 stringstream을 사용하면 어떨까요?
는 쓰나요?std::istringstream,std::ostringstream그리고.std::stringstream왜 그냥 사용하면 안 되는 겁니까?std::stringstream모든 시나리오에서 실행 시간 성능 문제가 있습니까?
마지막으로, (스트림을 전혀 사용하지 않는 대신) 이에 대해 좋지 않은 점이 있습니까?
std::string stHehe("Hello ");
stHehe += "stackoverflow.com";
stHehe += "!";
개인적으로, 저는 동일한 스트링 스트림으로 들어가고 나오는 스트리밍을 수행하는 것이 매우 드문 일이라고 생각합니다.
보통 저는 문자열에서 스트림을 초기화한 후 구문 분석하거나 문자열 스트림으로 스트리밍한 후 결과를 추출하여 저장하려고 합니다.
동일한 스트림으로 스트리밍하는 경우 스트림 상태 및 스트림 위치에 매우 주의해야 합니다.
'just' 를 합니다.istringstream아니면ostringstream를 더 잘에 대한 합니다.<<대>>.
실적 개선이 있을 수도 있지만, 그런 부분은 제가 먼저 생각하지는 않을 것 같습니다.
당신이 쓴 글에는 아무런 문제가 없습니다.성능이 충분하지 않은 경우 다른 접근 방식을 프로파일링할 수 있으며, 그렇지 않은 경우 가장 명확한 방법을 고수할 수 있습니다.개인적으로 저는 그냥 다음을 지지합니다.
std::string stHehe( "Hello stackoverflow.com!" );
A stringstream크기가 다소 크며 성능이 약간 낮을 수 있습니다. 여러 개의 상속을 수행하려면 vtable 포인터를 조정해야 합니다.주요 차이점은 (적어도 이론적으로는) 의도를 더 잘 표현하고 실수로 사용하는 것을 방지하는 것입니다.>>이 의도했던에<<(또는 그 반대).OTOH, 그 차이는 충분히 작아서 특히 데모 코드의 빠른 비트에 대해서는 귀찮아서 그냥 사용합니다.stringstream로 사용한 잘 나지 않습니다. 으로 한 인지 요 이 로 요 으로 이 로 인지 한 <<가 의도했을 때>>, 그래서 저에게는 안전이라는 부분이 대부분 이론적으로 느껴집니다. (특히 그런 실수를 한다면 거의 즉시 정말로 명백해질 것이기 때문입니다.)
원하는 것만 이루면 끈만 사용해도 전혀 문제가 없습니다.끈을 묶기만 하면 간편하고 효과도 좋습니다.a른의를고면,면, a.stringstream그것을 지원할 것이고, 끈은 대부분 지원하지 않을 것입니다.
경우 동일한 의 한 에서 과 을 로 입니다 입니다 로 의 을 std::ostringstream그리고.std::istringstream당신의 의도를 분명히 합니다.하는 것을 합니다. (로못을는다를한(다을t는e )<<대>>).
동일한 스트림에서 두 작업을 모두 수행해야 할 경우 범용 버전을 사용할 수 있습니다.
성능 문제는 여기서 여러분의 관심사 중 가장 적을 것입니다. 명확성이 가장 큰 장점입니다.
마지막으로 순수 문자열을 구성해야 하기 때문에 문자열 추가를 사용해도 문제가 없습니다.펄과 같은 언어에서 가능한 것처럼 숫자를 조합하는 데 사용할 수는 없습니다.
oststringstream은 입력용이고 oststringstream은 출력용입니다.stringstream 은 입력 및 출력됩니다.거의 모든 곳에서 스트링스트림을 사용할 수 있습니다.그러나 다른 사용자에게 개체를 주고 operator >>를 사용하는 반면, 쓰기만 개체를 기다리는 경우에는 행복하지 않습니다 ;-)
추신: 나쁜 점은 없고, 성능 문제일 뿐입니다.
std::ostringstream::stringstream::string은 스트림 내용의 복사본을 생성하며, 일부 상황에서는 메모리 사용량이 두 배로 증가합니다.std::stringstream 및 해당 rdbuf() 함수를 대신 사용하여 이를 방지할 수 있습니다.
자세한 내용: ostringstream을 cout에 직접 쓰는 방법
당신의 세번째 질문에 대답하자면, 아니요, 그것은 완벽하게 합리적입니다.림의과할다을수는은은다tn'ye수rfses의sttunfe할g을과operator<<, C된면할수다에열만는d)다a수에할d,((sy열c만recnc된,면는auco .std::string.
작업에 삽입만 하거나 추출만 하는 것이 적합한 경우 'i' 또는 'o' 접두사 버전 중 하나를 사용하여 원하지 않는 작업을 제외할 수 있습니다.
그게 중요하지 않다면 i/o 버전을 사용해도 됩니다.
당신이 보여주고 있는 문자열 연결은 완벽하게 유효합니다.문자열 스트림을 사용하여 연결하는 것이 가장 유용한 문자열 스트림의 기능은 아니지만 POD 및 추상 데이터 유형을 삽입하고 추출할 수 있습니다.
예를 들어 읽기만 하면 되는 경우 읽기/쓰기 액세스를 위해 파일을 여는 이유는 무엇입니까?
동일한 파일에서 여러 프로세스를 읽어야 할 경우에는 어떻게 됩니까?
언급URL : https://stackoverflow.com/questions/3292107/whats-the-difference-between-istringstream-ostringstream-and-stringstream-w
'programing' 카테고리의 다른 글
| glibc의 sscanf가 리눅스의 fscanf보다 매우 느린 이유는 무엇입니까? (0) | 2023.09.16 |
|---|---|
| 서비스를 시작하는 동안 오류가 발생했습니다.Oracle MTSRecovery Service를 찾을 수 없습니다. (0) | 2023.09.16 |
| MySQL 원격 연결이 결과를 표시하는 데 3분 이상 소요됨 (0) | 2023.09.16 |
| MySQL에서 특정 길이의 문자열 필드에 대한 쿼리 (0) | 2023.09.16 |
| Azure MariaDB - 존재하는 경우 드롭 테이블 ''; /*!50001 존재하는 경우 드롭 뷰 '' */; (0) | 2023.09.16 |