加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 04:52:51 所属栏目:百科 来源:网络整理
导读:我已经将文件内容读入char数组,然后将其中的一些数据读入向量中. 如何将一系列char数组复制到向量中? vector和char数组都是相同的类型(unsigned char). 目前的代码是这样的: int p = 0;for(...){ short len = (arr[p+1] 8) | arr[p+0]; p+=2; ... for(...l
我已经将文件内容读入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删除循环来改进这个,怎么样?

解决方法

可以使用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()得到第一个元素的地址.但请注意,无论使用哪种方法,您都必须确保向量中至少有一个元素.这两种方法都不需要检查它(尽管您的实现可能会对调试版本执行此操作),并且当您失败时,它们都会调用可怕的未定义行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读