C++ 是否有移动无符号字符块的方法';s转换为STL向量,而不是一次转换为1个无符号字符
我有一小部分C++代码,在C++ 是否有移动无符号字符块的方法';s转换为STL向量,而不是一次转换为1个无符号字符,c++,vector,stl,C++,Vector,Stl,我有一小部分C++代码,在未签名char的< /代码>中一次读取,然后为了调试目的,通过 STD::CUT < /P>输出 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
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;
}
intfd;
ssize_t bytes_read{0};
无符号字符*缓冲区{新的无符号字符[512]};
std::vector*pMemory{new std::vector(512)};
fd=open(“/tmp/text.txt”,仅限ordu);
如果(fd!=-1)
{
做
{
字节\读=读(fd,缓冲区,512);
如果(字节读取>0)
{
对于(int i=0;iemplace_back(缓冲区[i]);
}
}
}而(字节读取>0);
用于(自动常量和块:*pMemory)
{
std::cout您可以使用insert使代码更简单:
pMemory->insert(pMemory->end(),buffer,buffer+bytes_read);
但这可能会加快速度,也可能不会。如果性能是一个问题,您需要进行衡量
请注意,您不希望向量以512字节开始(就像现在一样),您只希望保留512字节,如下所示:
std::vector<unsigned char> *pMemory = new std::vector<unsigned char>;
pMemory->reserve(512);
如果您只想将文件读入向量,您可能想看看这个问题:您可以使用insert简化代码:
pMemory->insert(pMemory->end(),buffer,buffer+bytes_read);
但这可能会加快速度,也可能不会。如果性能是一个问题,您需要进行衡量
请注意,您不希望向量以512字节开始(就像现在一样),您只希望保留512字节,如下所示:
std::vector<unsigned char> *pMemory = new std::vector<unsigned char>;
pMemory->reserve(512);
如果你只是想把一个文件读入一个向量,你可能想看看这个问题:std::vector*
很奇怪。很少需要向量指针。当向量被分配到堆上时,我不需要一个指针来存储从new
返回的值吗?我想让pMemory指向那个分配的位置。我的意思是at无符号字符缓冲区[512];std::vector pMemory;
应该适合您的需要。感谢@Jarod42的帮助。std::vector*
很奇怪。很少需要向量指针。当向量被分配到堆上时,我不需要一个指针来存储new
返回的值吗?我希望pMemory指向分配的位置。我的意思是无符号char缓冲区[512];std::vector pMemory;
应该适合您的需要。谢谢@Jarod42的帮助。但是如果没有new
,那么vector
不会被分配到堆栈上吗?或者内存变量是分配到堆栈上的,而vector
会为堆上的向量内容分配内存吗?@SDavies:A vector ha这是两个部分。有一个(小的)将在堆栈上的部分,这只是几个指针。这些指针将指向向量管理的堆内存,正如您所猜测的。啊,好吧!谢谢您的帮助。但是如果没有new
,那么vector
不会在堆栈上分配吗?或者memory
变量是否在堆栈上分配了vector
为堆上向量的内容分配内存?@SDavies:向量有两个部分。堆栈上有一个(小)部分,它只是几个指针。这些指针将指向向量管理的堆内存,正如您所猜测的。啊,好的!谢谢您的帮助。