C++ 转换c++;标准::向量<;标准::字符串>;到std::vector<;无符号字符>;(反之亦然)

C++ 转换c++;标准::向量<;标准::字符串>;到std::vector<;无符号字符>;(反之亦然),c++,string,stl,vector,binary,C++,String,Stl,Vector,Binary,有没有一种简单的方法可以将std::vector转换为std::vector(然后再转换为std::vector),而不必手动转换每个字符串并添加分隔符,如逗号?简短的回答是:没有 向量和字符串的实现方式是作为独立的堆分配数组。因此,您可以将向量转换为字符**(字符数组的锯齿状数组),并将向量转换为字符*(字符数组)在考虑内部结构时,这会将问题转化为:是否有任何方法可以连接数组而不必复制它们 不,没有。简短的回答是:没有 std::vector<char> chars; for (c

有没有一种简单的方法可以将
std::vector
转换为
std::vector
(然后再转换为
std::vector
),而不必手动转换每个字符串并添加分隔符,如逗号?

简短的回答是:没有

向量和字符串的实现方式是作为独立的堆分配数组。因此,您可以将
向量
转换为
字符**
(字符数组的锯齿状数组),并将
向量
转换为
字符*
(字符数组)在考虑内部结构时,这会将问题转化为:是否有任何方法可以连接数组而不必复制它们


不,没有。

简短的回答是:没有

std::vector<char> chars;
for (const std::string& s : strings)
{
    for (char c : s)
    {
        chars.push_back(c);
    }
    chars.push_back(',');
}
向量和字符串的实现方式是作为独立的堆分配数组。因此,您可以将
向量
转换为
字符**
(字符数组的锯齿状数组),并将
向量
转换为
字符*
(字符数组)在考虑内部结构时,这会将问题转化为:是否有任何方法可以连接数组而不必复制它们

没有。没有。

std::vector chars;
std::vector<char> chars;
for (const std::string& s : strings)
{
    for (char c : s)
    {
        chars.push_back(c);
    }
    chars.push_back(',');
}
for(const std::string&s:strings) { 用于(字符c:s) { chars.推回(c); } 字符。推回(','); }
如果没有新的for循环语法,它会有点笨拙,但是你知道了; for(const std::string&s:strings) { 用于(字符c:s) { chars.推回(c); } 字符。推回(','); }
如果没有新的for循环语法,它会有点笨拙,但是你明白了。

应该让你把一个数据结构塞进一个
无符号字符的序列中,然后重新构造它。

应该让你把一个数据结构塞进一个
无符号字符的序列中,然后重新构造它。

第一个问题是w嘿,你想做什么?你想做什么
std::vector
表示什么,它的语义应该是什么 转换是?如果您只想连接,那么最简单的 解决方案如下:

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() );
}
但问题是:为什么
无符号字符
?大概是因为您 格式化为某个特定协议的缓冲区。是一些附加的 需要格式化?协议中字符串的格式是什么? (通常为长度+数据或
'\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' );
    }
}
std::向量结果;
对于(std::vector::const_迭代器iter=source.begin();
iter!=source.end();
++国际热核聚变实验堆(iter){
尺寸长度=iter->size();
结果:推回((len>>24)和0xFF);
结果:推回((len>>16)和0xFF);
结果:推回((len>>8)和0xFF);
结果:推回((len)和0xFF);
results.insert(results.end(),iter->begin(),iter->end());
while(results.size()%4!=0){
结果。将_向后推('\0');
}
}

第一个问题是为什么,你想做什么?你想做什么
std::vector
表示什么,它的语义应该是什么 转换是?如果您只想连接,那么最简单的 解决方案如下:

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() );
}
但问题是:为什么
无符号字符
?大概是因为您 格式化为某个特定协议的缓冲区。是一些附加的 需要格式化?协议中字符串的格式是什么? (通常为长度+数据或
'\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' );
    }
}
std::向量结果;
对于(std::vector::const_迭代器iter=source.begin();
iter!=source.end();
++国际热核聚变实验堆(iter){
尺寸长度=iter->size();
结果:推回((len>>24)和0xFF);
结果:推回((len>>16)和0xFF);
结果:推回((len>>8)和0xFF);
结果:推回((len)和0xFF);
results.insert(results.end(),iter->begin(),iter->end());
while(results.size()%4!=0){
结果。将_向后推('\0');
}
}

,例如。)

你能举个例子吗?请澄清你的问题。前者是字符串序列,而后者是单个字符序列。我想,你需要某种分隔符。在知道我们需要如何理解你想要做什么之前,举个例子会很有帮助。基本上,如果我想将std::string转换为std::vector,我可以做一些类似于std::vector char\u vec(myString.begin(),myString.end())
,对吗?我想知道是否有一种简单的方法可以以类似的方式将std::vector转换为std::vector`所以你真的不是说
std::vector
?这个问题确实需要澄清。字符串包装字符数组,字符向量包装字符数组,所以可以进行转换。但是字符串向量是acting是一个二维字符数组,而字符向量是一个一维数组;你怎么可能将一个字符“转换”为另一个字符?你能举个例子吗?请澄清你的问题。前者是字符串序列,后者是单个字符序列。我想,你需要某种分隔符。在知道我们需要如何转换之前理解你想做什么。举个例子会很有帮助。基本上,如果我想把std::string转换成std::vector,我可以这样做
std::vector char\u vec(myString.begin(),myString.end())
,对吗?我想知道是否有一种简单的方法可以以类似的方式将std::vector转换为std::vector`所以你的意思不是说
std::vector
?这个问题确实需要澄清