stringstream 재설정
stringstream의 상태를 내가 만들었을 때의 상태로 "재설정"하려면 어떻게합니까?
int firstValue = 1;
int secondValue = 2;
std::wstringstream ss;
ss << "Hello: " << firstValue;
std::wstring firstText(ss.str());
//print the value of firstText here
//How do I "reset" the stringstream here?
//I would like it behave as if I had created
// stringstream ss2 and used it below.
ss << "Bye: " << secondValue;
std::wstring secondText(ss.str());
//print the value of secondText here
이것은 내가 일반적으로하는 방법입니다.
ss.str("");
ss.clear(); // Clear state flags.
난 그럴거야
std::wstringstream temp;
ss.swap(temp);
편집 : christianparpart 및 Nemo가보고 한 오류를 수정했습니다. 감사.
추신 : 위의 코드는 스택에 새로운 stringstream 객체를 생성하고 모든 것을 새로운 객체의 객체로 교체 ss
합니다.
장점 :
ss
이제 새로운 상태가 보장 됩니다.- 새 개체는 인라인 및 스택에 생성되므로 컴파일러가 코드를 쉽게 최적화 할 수 있습니다. 결국 모든
ss
내부 데이터를 초기 상태로 재설정하는 것과 같습니다 .
더:
할당 연산자와 비교 : STL 스왑 메서드는 새 개체의 힙에 할당 된 버퍼가있는 경우 할당 연산자보다 빠를 수 있습니다. 이러한 경우 할당 연산자는 새 개체에 대한 버퍼를 할당해야하며, 이전 개체에 대해 다른 버퍼를 할당 한 다음 새 개체의 버퍼에서 이전 개체의 새 버퍼로 데이터를 복사해야 할 수 있습니다. 예를 들어 버퍼의 포인터 만 바꾸는 빠른 스왑을 구현하는 것은 매우 쉽습니다.
C ++ 11. 스왑보다 느린 이동 할당 연산자의 일부 구현을 보았지만 수정할 수는 있지만 아마도 STL 개발자는 많은 데이터가있는 이동 된 개체를 남기고 싶지 않을 것입니다.
std::move()
이동 된 개체가 비워지는 것을 보장하지 않습니다.return std::move(m_container);
m_container를 지우지 않습니다. 그래서 당신은해야 할 것입니다자동 to_return (std :: move (m_container)); m_container.clear (); return to_return;
어느 것이 더 나을 수 없습니다
auto to_return;
m_container.swap(to_return);
return to_return;
후자는 버퍼를 복사하지 않도록 보장하기 때문입니다.
그래서 나는 항상 swap()
그것이 맞는 한 선호합니다 .
위의 답변을 바탕으로 서식을 재설정해야합니다. 우리는 모두 새로운 std :: stringstream 인스턴스가 생성 될 때 버퍼 내용, 스트림 상태 플래그 및 모든 형식을 기본값으로 재설정합니다.
void reset(std::strinstream& stream)
{
const static std::stringstream initial;
stream.str(std::string());
stream.clear();
stream.copyfmt(initial);
}
참고 URL : https://stackoverflow.com/questions/7623650/resetting-a-stringstream
'IT TIP' 카테고리의 다른 글
Java int는 항상 32 비트입니까? (0) | 2020.10.16 |
---|---|
doxygen을 사용하여 C ++ 소스에서 UML 클래스 다이어그램을 만드는 방법 (0) | 2020.10.16 |
Imshow : 범위 및 측면 (0) | 2020.10.16 |
phpunit에 실패시 중지하는 방법 (0) | 2020.10.16 |
HTML 툴팁 (제목 속성)의 형식을 지정할 수 있습니까? (0) | 2020.10.16 |