std :: vector <char>에서 std :: string을 생성하는 방법은 무엇입니까? 먼저 빌드 한 다음이를

(분명한) C 스타일 문자열을 먼저 빌드 한 다음이를 사용하여 std :: string을 만드는 것이 부족합니다. 문자 벡터에서 문자열을 초기화하는 더 빠르고 / 대안 / “더 나은”방법이 있습니까?



답변

음, 가장 좋은 방법은 다음 생성자를 사용하는 것입니다.

template<class InputIterator> string (InputIterator begin, InputIterator end);

다음과 같은 결과가 나타납니다.

std::vector<char> v;
std::string str(v.begin(), v.end());

답변

나는 당신이 할 수 있다고 생각합니다

std::string s( MyVector.begin(), MyVector.end() );

여기서 MyVector는 std :: vector입니다.


답변

C ++ 11을 사용하면 할 수 있습니다. std::string(v.data())또는 벡터 '\0'의 끝에 a가 없으면 std::string(v.data(), v.size()).


답변

std::string s(v.begin(), v.end());

v는 반복 가능한 거의 모든 것입니다. (특히 begin () 및 end ()는 InputIterators를 반환해야합니다.)


답변

완전성을 위해 다른 방법은 std::string(&v[0])(문자열이 null로 끝나고 std::string(v.data())일반적으로 선호되는 것을 확인해야하지만 .

차이점은 .data ()로는 할 수없는 버퍼를 수정하려는 함수에 벡터를 전달하기 위해 앞의 기술을 사용할 수 있다는 것입니다.


답변

나는 Stefan의 대답 (Sep 11 ’13)을 좋아하지만 조금 더 강하게 만들고 싶습니다.

벡터가 null 종결 자로 끝나는 경우 (v.begin (), v.end ())를 사용해서는 안됩니다. v.data ()를 사용해야합니다 (또는 C ++ 17 이전의 경우 & v [0]). .

v에 null 종결자가 없으면 (v.begin (), v.end ())를 사용해야합니다.

begin () 및 end ()를 사용하고 벡터에 종결 0이 있으면 문자열 “abc \ 0″으로 끝납니다. 예를 들어 길이가 4이지만 실제로는 “abc”여야합니다.


답변

vector<char> vec;
//fill the vector;
std::string s(vec.begin(), vec.end());

이 글은 C++ 카테고리에 분류되었고 태그가 있으며 님에 의해 에 작성되었습니다.