C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 在范围内构造向量而不复制大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含大量字节的类,这些字节是网络数据包.该类实现一个队列并提供(以及其他)front()函数,该函数返回构成队列中最旧数据包的字节的const向量.

class Buffer{
  unsigned char data[65536];
  unsigned int offset;
  unsigned int length;
  [...]//other fields for maintaining write ptr etc.

public:
  const std::vector<unsigned char> front(){
    return std::vector<unsigned char>(data + offset,data + offset + length);
  }

  //other methods for accessing the queue like
  //pop(),push(),clean() and so forth...
  [...]
}

上述front()函数实现的性能受到当前数据包占用范围内不必要的复制字节的影响.由于向量是常量,因此不需要复制数据.我想要的是在已经存储在缓冲区中的数据上创建一个向量.当然,向量的析构函数不应该释放内存.

解决方法

您有一些选择:

>而不是返回一个向量,只需返回一个const char *:

const char* front() {
    return data;
}

>虑使用标准容器,例如字符串数据作为缓冲区成员.这将允许您:

const String& front() {
    return data;
}

>最好的选择是,如果您有C 17或访问@L_944_12@,您可以这样做:

const String_view front() {
    return String_view(data);
}

只是一个约定评论,前面会有一个期望,它将像其他标准容器一样,其中:

[source]

C标准委员会还讨论了将正面应用于裸露的固定尺寸阵列:front and back Proposal for iterators Library

因为这种方法更接近数据,其中:

[source]

大佬总结

以上是大佬教程为你收集整理的c – 在范围内构造向量而不复制全部内容,希望文章能够帮你解决c – 在范围内构造向量而不复制所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。