我已将文件内容读入char数组,然后将其中的一些数据读入矢量。 如何将一系列char数组复制到向量中? vector和char数组都是相同的类型(unsigned char)。
目前的代码是这样的:
int p = 0;
for(...){
short len = (arr[p+1] << 8) | arr[p+0];
p+=2;
...
for(...len...){
vec.push_back(arr[p]);
p++;
}
}
我想通过使用push_back
,如何删除循环来改善这一点,
答案 0 :(得分:20)
使用insert()
成员函数
vec.insert(vec.end(), arr, arr+len);
当然,还有一个assign()
,可能更接近你想做的事情:
vec.assign(arr, arr+len);
然而,阅读你的问题我想知道为什么你会首先读入C数组只是为了将其内容复制到一个向量中,当你可以立即读入一个向量。需要std::vector<>
将其数据保存在一个连续的内存块中,您可以通过获取其第一个元素的地址来访问此块。只要确保你在矢量中有足够的空间:
std::size_t my_read(char* buffer, std::size_t buffer_size);
vec.resize( appropriate_length );
vec.resize( my_read_func(&vec[0], vec.size()) );
您可以通过&vec[0]
获取第一个元素的地址,而不是&*vec.begin()
。但请注意,使用任何一种方法,您绝对必须确保 至少有一个元素在