2012-02-22 2 views
1

std::vector<std::string> 다시 다시 std::vector<unsigned char>std::vector<std::string> 변환 (그리고 할 수있는 간단한 방법이 있을까요을 수동으로 변환 할 필요없이 벡터 각 문자열은 쉼표로 구분 기호를 추가 변환하는 C++ 표준 : : 성병 : 벡터 <서명 숯불> (반대의 경우도 마찬가지)

+0

당신이 예를 들어 줄 수 있습니까? –

+0

질문을 명확히하십시오. 전자는 일련의 문자열이고 후자는 단일 문자 시퀀스입니다. 어떤 구분자가 필요합니다. 상상해보십시오. 당신이하고 싶은 것을 어떻게 이해해야 하는지를 알기 전에. 예를 들어 도움이 될 것입니다. –

+0

기본적으로 std :: string을 std :: vector 로 변환하려면 std :: vector char_vec (myString.begin(), myString.end))', 맞죠?std :: vector 을 std :: vector '와 비슷한 방식으로 변환하는 쉬운 방법이 있는지 궁금합니다. – user1225011

답변

1

짧은 대답은?. 어떤

벡터와 문자열이 구현되는 방식을 독립적 인, 힙 할당 배열 따라서에 vector<string> 변환 할 수 같습니다. char** (char 배열 배열)과 vector<unsigned char> (문자 배열)에 char* 내부에 대해 hinking. 이렇게하면 문제가 발생합니다 : 복사하지 않고도 배열을 연결할 수있는 방법이 있습니까?

아니요 아니요.

0
std::vector<char> chars; 
for (const std::string& s : strings) 
{ 
    for (char c : s) 
    { 
     chars.push_back(c); 
    } 
    chars.push_back(','); 
} 

새로운 for 루프 구문이 없으면 좀 더 어색하지만 생각을하게됩니다.

+1

C++에는 반복기가 있습니다! chars.insert (chars.end(), s.begin(), s.end());를 작성할 수 있습니다. –

0

Boost Serialization 데이터 구조를 unsigned char 시퀀스에 채우고 다시 구성해야합니다.

0

첫 번째 질문은 왜이며, 무엇을하려고합니까? std::vector<std::string>은 무엇을 나타내며, 변환은 의 의미가 무엇입니까?

std::vector<unsigned char> results; 
for (std::vector<std::string>::const_iterator iter = source.begin(); 
     iter != source.end(); 
     ++ iter) { 
    results.insert(results.end(), iter->begin(), iter->end()); 
} 

charunsigned char로의 암시 적 변환 reslt 처리됩니다 : 당신은 그냥 연결하는 싶은 경우에, 간단한 솔루션은 무언가 같이 될 것입니다. 원본의 각 문자열 분리 또는 종료의 어떤 종류를 삽입해야하는 경우

, 당신은뿐만 아니라 루프에서이 작업을 수행 할 수 있습니다하십시오 종결을 위해, 단지 insert 후 (push_back)를 추가; 분리, 나는 일반적으로 insert, 예컨대 :

std::vector<unsigned char> results; 
for (std::vector<std::string>::const_iterator iter = source.begin(); 
     iter != source.end(); 
     ++ iter) { 
    if (iter != source.begin()) { 
     results.push_back(separator); 
    } 
    results.insert(results.end(), iter->begin(), iter->end()); 
} 

전에 조건을 추가하지만 질문은 왜 unsigned char? 아마, 당신은 특정 프로토콜을위한 버퍼로 포맷하기 때문입니다. 추가로 형식이 필요합니까? 프로토콜의 문자열 형식은 무엇입니까? (일반적으로 길이 + 데이터 또는 '\0' 종료 됨) 프로토콜에 일종의 정렬이 필요합니까? (XDR — 중 하나 가장 널리 사용되는 프로토콜 —를 들어, 같은 필요한 것 :. 예를 들어

std::vector<unsigned char> results; 
for (std::vector<std::string>::const_iterator iter = source.begin(); 
     iter != source.end(); 
     ++ iter) { 
    size_t len = iter->size(); 
    results.push_back((len >> 24) & 0xFF); 
    results.push_back((len >> 16) & 0xFF); 
    results.push_back((len >> 8) & 0xFF); 
    results.push_back((len  ) & 0xFF); 
    results.insert(results.end(), iter->begin(), iter->end()); 
    while (results.size() % 4 != 0) { 
     results.push_back('\0'); 
    } 
} 

를)

관련 문제