有没有一种方法可以将无符号字符块移动到 STL 向量中,而不是一次移动 1 个无符号字符



我有一小段C++代码,每次在unsigned char's中读取一个块,然后出于调试目的,通过std::cout 输出

int fd;
ssize_t bytes_read {0};
unsigned char *buffer {new unsigned char[512]};
std::vector<unsigned char> *pMemory {new std::vector<unsigned char>(512)};
fd = open("/tmp/text.txt", O_RDONLY);
if (fd != -1)
{
    do
    {
        bytes_read = read(fd, buffer, 512);
        if (bytes_read > 0)
        {
            for (int i = 0; i < bytes_read; ++i) {
                pMemory->emplace_back(buffer[i]);
            }
        }
    } while (bytes_read > 0);
    for (auto const& block : *pMemory)
    {
        std::cout << block;
    }
    std::cout << std::endl;
}

我已经用一个块初始化了向量pMemory,以防止每次调用pMemory->emplace_back(buffer[i])时内存抖动,但我想知道是否有更有效的方法(也许是使用迭代器从buffer数组中移动一个范围?),将buffer中的每个内存块移动到一个向量中?

使用insert:可以简化代码

pMemory->insert(pMemory->end(),buffer,buffer+bytes_read);

不过,它可能会也可能不会让它更快。如果性能是一个问题,您需要衡量。

请注意,您不希望向量以512字节开始(就像现在一样),您只需要保留512字节,就像这样:

std::vector<unsigned char> *pMemory = new std::vector<unsigned char>;
pMemory->reserve(512);

但您根本不需要使用new

unsigned char buffer[512];
std::vector<unsigned char> memory;
memory.reserve(512);
.
.
.
memory.insert(memory.end(),buffer,buffer+bytes_read);

如果你只想把文件读入一个向量,你可能想看看这个问题:把文件读入std::vector<char>?

最新更新