【发布时间】:2009-09-09 13:23:48
【问题描述】:
将 C 缓冲区 (char *) 的内容附加到 std::vector<char> 末尾的正确(有效)方法是什么?
【问题讨论】:
将 C 缓冲区 (char *) 的内容附加到 std::vector<char> 末尾的正确(有效)方法是什么?
【问题讨论】:
当您有可用的vector<char> 时,您可能最好调用vector<char>::insert 方法:
std::vector<char> vec;
const char* values="values";
const char* end = values + strlen( values );
vec.insert( vec.end(), values, end );
将其委托给向量比使用back_inserter 更可取,因为向量可以决定其最终大小。 back_inserter 只会push_back,可能会导致更多的重新分配。
【讨论】:
我认为正确的方法是
vec.insert(vec.end(),buf,buf+length);
或
std::copy(buf,buf+length,std::back_inserter(vec));
编辑:我重新排序了两个例子,所以不是评论者错了,只是我错了;-)
【讨论】:
vector<> 是一个简单的模板,char* 是一个简单的迭代器,char 是一个简单的 POD。
我还没有编译,但应该是这样的:
const char string1[] = "a string";
std::vector<char> vData;
vData.insert(vData.end(), string1, string1+strlen(string1));
【讨论】: