小编sei*_*lgu的帖子

如何使用std :: make_heap

http://www.cplusplus.com/reference/algorithm/push_heap/

这太令人困惑了.要在std中使用堆,首先将元素放在向量中,然后调用

std::make_heap(v.begin(), v.end());
Run Code Online (Sandbox Code Playgroud)

如果我在向量中插入元素怎么办?堆乱了吗?例如,v最初可能有10个元素,而我只将堆从第3个元素变为第7个元素,现在我将元素插入到第5个位置和第9个位置,是不是在进程中销毁了堆结构?

为什么push_back(99)push_heap再次打电话之前你必须先在例子中?看起来不仅令人困惑而且效率低下.

那是什么意思sort_heap()?不应该对堆进行排序,(那是什么使它成为堆的权利?)

c++ heap std

6
推荐指数
1
解决办法
5837
查看次数

提升streambuf消费和提交,它是什么

我似乎无法找到pas()和commit()实际意味着什么的好解释,实际上我根本不理解streambuf.

我的理解是,streambuf只是一个字符数组.但为什么在文档中,

basic_streambuf::data
Get a list of buffers that represents the input sequence.
Run Code Online (Sandbox Code Playgroud)

所以实际上有很多缓冲区?什么是'输入序列'和'输出序列'?这是另外两个缓冲区吗?

以下代码真正做了什么?

streambuf b;
size_t size;
size = read( socket, b.prepare( 1024 ) ); 
b.commit( size );
size = write( socket, b.data() );
b.consume( size );
Run Code Online (Sandbox Code Playgroud)

当我调用b.prepare()时,它是否为read()分配一个新的缓冲区来放置数据?那么数据何时从该缓冲区传输到底层的streambuf缓冲区?我以为是commit(),但是

basic_streambuf::commit
Move characters from the output sequence to the input sequence.
Run Code Online (Sandbox Code Playgroud)

因此似乎提交实际上将数据从"输出序列"移动到"输入序列",而没有提到用于存储数据的底层缓冲区!

streambuf

6
推荐指数
1
解决办法
2156
查看次数

标签 统计

c++ ×1

heap ×1

std ×1

streambuf ×1