14

我已将文件内容读入 char 数组,然后将其中的一些数据读入向量。如何将 char 数组的范围复制到向量中?vector 和 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,如何?

4

1 回答 1

26

可以使用insert()成员函数将某些内容附加到向量:

vec.insert(vec.end(), arr, arr+len);

当然,还有一个assign(),它可能更接近你想要做的:

vec.assign(arr, arr+len);

但是,阅读您的问题时,我想知道为什么您会先读入一个 C 数组,只是为了将其内容复制到一个向量中,而您可以立即读入一个向量。Astd::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(). 但是,请注意,无论使用哪种方法,您都必须确保vector 中至少有一个元素。这两种方法都不需要检查它(尽管您的实现可能会在调试版本中这样做),并且当您失败时,它们都会调用可怕的未定义行为。

于 2011-01-21T11:29:16.653 回答