首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种连接多个缓冲区的有效方法

一种连接多个缓冲区的有效方法
EN

Stack Overflow用户
提问于 2015-12-29 15:30:22
回答 3查看 1.8K关注 0票数 3

我需要设计一个具有两个主要功能的高效可读的类:

  • add_buffer(char* buffer) --添加一个缓冲区。
  • char* read_all() -获取一个大缓冲区,其中包含用户添加的所有缓冲区(按顺序)。

例如:

代码语言:javascript
复制
char first_buffer[] = {1,2,3};
char second_buffer[] = {4,5,6};

MyClass instance;
instance.add_buffer(first_buffer);
instance.add_buffer(second_buffer);
char* big_buffer = instance.read_all(); // big_buffer = [1,2,3,4,5,6]

注意到:这个问题有很多解决方案,但我正在寻找一个有效的解决方案,因为在现实生活中,缓冲区将是多而大的,并且我想保存大量的复制和分配(就像std::所做的那样)。我还想要一个可读的c++代码。

注意到:现实生活中的问题是:我正在读取一个来自于分离块的HTTP的数据。在所有的数据块到达后,我想将全部数据返回给用户。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-29 15:33:10

使用具有足够内存的std::vector<char> reserved。从C++11开始,您可以使用std::vector::data()访问内部缓冲区(直到C++11,您必须使用&*std::vector::begin())。

票数 8
EN

Stack Overflow用户

发布于 2015-12-29 19:58:49

如果您可以使用Boost,boost::algorithm::join将执行以下操作:

# std::vector列表;list.push_back("Hello");list.push_back("World!");std::string联接=boost::算法::join(list,",");std::cout << <<::endl;} 输出: 你好,世界!

Original answer,Tristram Gr bener

票数 2
EN

Stack Overflow用户

发布于 2015-12-29 15:37:00

用一些标准的方法比如,

  • 从一些初始内存开始,比如256
  • 每当它得到充分利用,重新分配和翻倍的大小。

如果您不想自己动手,请使用STL容器,如

代码语言:javascript
复制
std::vector<char>

当缓冲区已满时,它会自动为您重新分配内存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34514098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档