如何将char数组中的一系列数据复制到向量中?

时间:2011-01-21 11:27:15

标签: c++ stdvector

我已将文件内容读入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,如何删除循环来改善这一点,

1 个答案:

答案 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()。但请注意,使用任何一种方法,您绝对必须确保 至少有一个元素在 中。这两种方法都不需要检查它(尽管您的实现可能会对调试版本执行此操作),并且当您失败时,它们都会调用可怕的未定义行为