gpt4 book ai didi

c++ - 使用 vector 作为输入缓冲区比 char 数组有什么优势?

转载 作者:太空狗 更新时间:2023-10-29 19:49:48 29 4
gpt4 key购买 nike

我正在从事网络编程,我看到有人使用 vector 作为套接字的输入缓冲区而不是字符数组。

我想知道这样做有什么好处。

提前致谢..

最佳答案

A vector<char>本质上只是一个托管字符数组。

所以你可以这样写:

{
vector<char> buf(4096);
...
int result = recv(fd, &buf[received_so_far], buf.size() - received_so_far);
...
}

vector “知道”它的大小,所以你可以使用 buf.size()无处不在,永远不必担心缓冲区溢出。您还可以在声明中更改大小并使其在任何地方都生效,而无需任何困惑的#defines。

buf 的使用将在堆上分配底层数组,并在 buf 时自动释放它。超出范围,不管它是如何发生的(例如异常或提前返回)。因此,您可以获得良好的堆栈分配语义,同时仍将大对象保留在堆上。

您可以使用 buf.swap()将底层字符数组的“所有权”交给另一个 vector<char>非常有效。 (这对网络流量来说是个好主意......现代网络速度很快。你最不想做的就是为你从网络接收到的每个字节创建另一个拷贝。)而且你仍然不必明确地担心释放内存。

对于这个特定的应用程序,这些是我脑海中浮现的巨大优势。

关于c++ - 使用 vector<char> 作为输入缓冲区比 char 数组有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6435171/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com