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或访问 const string_view front() { return string_view(data); } 只是一个约定评论,前面会有一个期望,它将像其他标准容器一样,其中:
[source] C标准委员会还讨论了将正面应用于裸露的固定尺寸阵列:front and back Proposal for iterators Library 因为这种方法更接近数据,其中:
[source] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails-4 – 忽略Rails中未允许的参数4
- Scikit-learn Preprocessing 预处理
- objective-c – stringByAppendingString导致系统内存耗尽应
- “未能加载文件或程序集“×××”或它的某一个依赖项。试图
- Qt操作xml引发内部异常(Qt5Xml.lib和Qt5Xmld.lib)
- 为什么使用Dojo toolkit的十大原因
- Xcode 8:打开bundle-id的请求失败. SpringBoard无法为请求
- 原生SSH2依赖jar包
- c# – Visual Studio – Windows窗体或WPF?
- ruby-on-rails – Ruby:给出一个日期,找到下一个第二或第四