有效地将数据加载到 std::vector 中<char>

Load data into std::vector<char> efficiently

本文关键字:lt char gt 数据 std 有效地 vector 加载      更新时间:2023-10-16

我的理解是,您可以使用指针访问std::vector中的数据。例如:

char *ptr;
std::vector<char> v1 {'A', 'B', 'C'};
ptr = &v1[0]
if (*(ptr+1) == 'B')
std::cout << "Addressing via pointer worksn";

直接加载一个 std::vector 怎么样?例如:

std::vector<char> v2;
v2.reserve(3); // allocate memory in the vector 
ptr = &v2[0]
*ptr = 'A';
*(ptr+1) = 'B';
*(ptr+2) = 'C';
if (v2[1] == 'B')
std::cout << "Data is in vector buffer!n";

if (!v2.size())
std::cout << "But the vector doesn't know about it!n";

我的问题:有没有办法告诉 v2 向量其内部内存缓冲区加载了数据?当您想要使用 std::vector 来保存来自文件流的数据时,这将非常有用。

我期待你的评论。

有没有办法告诉 v2 向量其内部内存缓冲区加载了数据?

不。

第二个示例的行为未定义。

当您想要使用 std::vector 来保存来自文件流的数据时,这将非常有用。

你可以像这样将文件读入矢量:

std::vector<char> v3(count);
ifs.read(v3.data(), count);

或者像这样:

using It = std::istreambuf_iterator<char>;
std::vector<char> v4(It{ifs}, It{});