C++ 将字符缓冲区附加到向量<;char>;在STL中

C++ 将字符缓冲区附加到向量<;char>;在STL中,c++,stl,vector,C++,Stl,Vector,将C缓冲区的内容(char*)附加到std::vector末尾的正确(有效)方法是什么?当您有可用的向量时,您可能最好调用vector::insert方法: std::vector<char> vec; const char* values="values"; const char* end = values + strlen( values ); vec.insert( vec.end(), values, end ); std::向量向量向量机; const char*va

将C缓冲区的内容(
char*
)附加到
std::vector
末尾的正确(有效)方法是什么?

当您有可用的
向量时,您可能最好调用
vector::insert
方法:

std::vector<char> vec;

const char* values="values";
const char* end = values + strlen( values );

vec.insert( vec.end(), values, end );
std::向量向量向量机;
const char*values=“values”;
常量字符*结束=值+字符串(值);
插入向量(vec.end(),值,end);

最好将其委托给向量,而不是使用
反向插入器
,因为向量可以决定其最终大小。
back\u插入器
只会
推回
,可能会导致更多的重新分配。

我认为正确的方法是

vec.insert(vec.end(),buf,buf+length);


编辑:我重新排序了两个示例,所以不是评论者错了,而是我;-)

我还没有编译,但应该是这样的:

const char string1[] = "a string";
std::vector<char> vData;
vData.insert(vData.end(), string1, string1+strlen(string1));
const char string1[]=“一个字符串”;
std::矢量数据;
插入(vData.end(),string1,string1+strlen(string1));

虽然第一个也是正确的,但第二个更好,因为向量可以推断迭代器是随机访问迭代器,并使用它们预先进行保留,从而节省可能的重新分配。True。不过,我对它没什么期望。无论如何,通往罗马的路不止一条;-)实际上,我希望第二个更好,因为许多现代实现现在优化了简单案例。这在三个方面很简单:
vector
是一个简单的模板,
char*
是一个简单的迭代器,
char
是一个简单的POD。我会根据流行的需求对它们进行重新排序,但我想说的主要一点是,有多种方法是很好的。感谢MSalters和sbi的评论。
const char string1[] = "a string";
std::vector<char> vData;
vData.insert(vData.end(), string1, string1+strlen(string1));