c++ - 如何将一系列数据从 char 数组复制到 vector 中?

标签 c++ stdvector

我已将文件内容读入一个 char 数组,然后将其中的一些数据读入一个 vector 。 如何将 char 数组的范围复制到 vector 中? 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 删除循环来改进这一点,怎么做?

最佳答案

可以使用 insert() 向 vector 添加内容。成员函数:

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

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

vec.assign(arr, arr+len);

但是,阅读您的问题时,我想知道为什么您会先读入一个 C 数组只是为了将其内容复制到一个 vector 中,而您可以立即读入一个 vector 。 std::vector<>需要将其数据保存在一个连续的内存块中,您可以通过获取其第一个元素的地址来访问该 block 。只要确保 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 中至少有一个元素。这两种方法都不需要检查它(尽管您的实现可能会为调试构建这样做),并且当您失败时,这两种方法都会调用可怕的未定义行为

关于c++ - 如何将一系列数据从 char 数组复制到 vector 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4758257/

相关文章:

java - 日志记录框架注意事项

c++ - 不同概率的随机数

c++ - VS2010 C代码——字符串池

c# - VS2013专业本地64位调试MSVSMON问题

python - 删除 std::vector 中由 boost::python 公开的指针

C++ std::vector - 如何修改迭代器指定的元素?

带有自定义内存分配器的 std::vector 的 C++ 模板

c++ - 如何在不导致复制的情况下将 char 数据附加到 std::vector

C++ std::vector::size() 改变它的状态

C++ 设置 : No match for - operator