가 std::vector<std::string>
다시 다시 std::vector<unsigned char>
에 std::vector<std::string>
변환 (그리고 할 수있는 간단한 방법이 있을까요을 수동으로 변환 할 필요없이 벡터
답변
짧은 대답은?. 어떤
벡터와 문자열이 구현되는 방식을 독립적 인, 힙 할당 배열 따라서에 vector<string>
변환 할 수 같습니다. char**
(char 배열 배열)과 vector<unsigned char>
(문자 배열)에 char*
내부에 대해 hinking. 이렇게하면 문제가 발생합니다 : 복사하지 않고도 배열을 연결할 수있는 방법이 있습니까?
아니요 아니요.
std::vector<char> chars;
for (const std::string& s : strings)
{
for (char c : s)
{
chars.push_back(c);
}
chars.push_back(',');
}
새로운 for 루프 구문이 없으면 좀 더 어색하지만 생각을하게됩니다.
C++에는 반복기가 있습니다! chars.insert (chars.end(), s.begin(), s.end());를 작성할 수 있습니다. –
Boost Serialization 데이터 구조를 unsigned char
시퀀스에 채우고 다시 구성해야합니다.
첫 번째 질문은 왜이며, 무엇을하려고합니까? 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());
}
char
unsigned 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');
}
}
를)
- 1. AWK - 긍정적이고 반대의 경우도 마찬가지
- 2. jQuery를 바인드 기능이 아닌 자식 앵커 반대의 경우도 마찬가지
- 3. 은 BST의 왼쪽에 바로 아이들을 삽입하고, 그 반대의 경우도 마찬가지
- 4. 은 열거 플래그에서 CSV로 변환하고 그 반대의 경우도 마찬가지
- 5. 성병 : 벡터
- 6. 성병 : 벡터 데이터에서 구조체 채우기 <서명 숯불>
- 7. Eclipse RCP 플러그인 JAR을 플러그인 디렉토리로 변환하는 방법 (반대의 경우도 마찬가지)
- 8. SL OOB 응용 프로그램에서 메소드를 Dot net 라이브러리에서 호출하는 방법 (그 반대의 경우도 마찬가지)?
- 9. 에 액세스하는 방법을 WPF 응용 프로그램 및 ClassLibrary의 회원들과 그 반대의 경우도 마찬가지
- 10. ASP.NET MVC 어떻게 부모 뷰는 부분도 통신 할 수 있습니다 또는 그 반대의 경우도 마찬가지
- 11. C++ DLL 복귀 포인터는 성병 : : 목록 <표준 : : wstring의>
- 12. 도서관 크로스 플랫폼을위한 MIME 타입의 매핑 확장을 제기하고 그 반대의 경우도 마찬가지
- 13. 배열의 합이 최대 수보다 큰 경우와 그 반대의 경우도 마찬가지 자바 스크립트
- 14. 감지 여부 아이폰은 3G를 와이파이에서 로밍 또는 그 반대의 경우도 마찬가지
- 15. 현재 입력 필드를 선택하고 다음 입력 필드를 비활성화하고 비우는 방법 (반대의 경우도 마찬가지 임)?
- 16. JSON 문자열을 JavaScript 함수의 속성에서 파생시키는 방법 (반대의 경우도 마찬가지 임)
- 17. 방법/함수 인수 : 값 다음 인덱스 또는 그 반대의 경우도 마찬가지 당신이 할 것
- 18. 언제지면을 브랜칭보다 선호해야하며 (CVS에서) 반대의 경우도 마찬가지입니까?
- 19. C++ 친구 클래스 표준 : : 벡터
- 20. 어떻게 변환하는 벡터 <벡터 <string>은>
- 21. 이동 표준 : : 벡터 <T> *이
- 22. 표준 : : 벡터
- 23. C++ : 표준 : : IStream을 읽고 그 호출은 성병 :: streambuf의 언더
- 24. 새 서버 : (. Mediatemple를)을 나는 새 호스트에 웹 사이트를 이동하기 위해 노력하고있어 HTTPS 및 그 반대의 경우도 마찬가지
- 25. "치과"와 같은 쿼리에서 "치과", "치과 의사"와 같은 단어를 얻을 수있는 적절한 접근법 (반대의 경우도 마찬가지 임)
- 26. 은 벡터화되지 않은 상황에서 적법한 것이고 그 반대의 경우도 있습니까?
- 27. 성능을 위해 데이터베이스 크기를 희생 시키거나 그 반대의 경우도 마찬가지입니까?
- 28. addon 컨텍스트에서 contentScript 변수에 액세스하고 그 반대의 경우도 마찬가지입니까?
- 29. Java, 부울을 부울로 지정할 수 있습니까? 그 반대의 경우도 가능합니까?
- 30. C++ 표준 : : 벡터 <uint8>이 가득하지만, 데이터가
당신이 예를 들어 줄 수 있습니까? –
질문을 명확히하십시오. 전자는 일련의 문자열이고 후자는 단일 문자 시퀀스입니다. 어떤 구분자가 필요합니다. 상상해보십시오. 당신이하고 싶은 것을 어떻게 이해해야 하는지를 알기 전에. 예를 들어 도움이 될 것입니다. –
기본적으로 std :: string을 std :: vector로 변환하려면 std :: vector char_vec (myString.begin(), myString.end))', 맞죠?std :: vector 을 std :: vector '와 비슷한 방식으로 변환하는 쉬운 방법이 있는지 궁금합니다. –
user1225011