我已经将文件内容读入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++;
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过放弃循环来改进这个push_back,怎么样?
sbi*_*sbi 22
可以使用insert()成员函数将某些内容附加到向量:
vec.insert(vec.end(), arr, arr+len);
Run Code Online (Sandbox Code Playgroud)
当然,也有一个assign(),可能更接近你想做的事情:
vec.assign(arr, arr+len);
Run Code Online (Sandbox Code Playgroud)
然而,阅读你的问题我想知道为什么你会首先读入C数组只是为了将其内容复制到一个向量中,当你可以立即读入一个向量.A 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()) );
Run Code Online (Sandbox Code Playgroud)
而不是&vec[0]你也可以得到第一个元素的地址&*vec.begin().但请注意,无论使用哪种方法,您都必须确保向量中至少有一个元素.这两种方法都不需要检查它(尽管您的实现可能会对调试版本执行此操作),并且当您失败时,它们都会调用可怕的未定义行为.