Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否有移动无符号字符块的方法';s转换为STL向量,而不是一次转换为1个无符号字符_C++_Vector_Stl - Fatal编程技术网

C++ 是否有移动无符号字符块的方法';s转换为STL向量,而不是一次转换为1个无符号字符

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

我有一小部分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.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:向量有两个部分。堆栈上有一个(小)部分,它只是几个指针。这些指针将指向向量管理的堆内存,正如您所猜测的。啊,好的!谢谢您的帮助。