gpt4 book ai didi

c++ - 一次将文件读入 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:01 25 4
gpt4 key购买 nike

读入 std::vector 是个好主意,还是这里有一些问题:

using namespace std;
ifstream file("blah.dat", ios::binary);

vector<T> v(N);

file.read(static_cast<char*>(v.data()), N * sizeof(T));

vector 标准是否允许我这样做来填充 vector ?为了简单起见,让我们假设 T 是一种普通旧数据类型。

最佳答案

如果T,这里没有未定义的行为是平凡可复制的,PODs 肯定是。 vector<T>::data保证返回指向 vector<T>::size 的连续数组的指针T s,以及普通可复制类型的对象表示 T保证是 sizeof(T) 的连续序列字节(可能包括内部填充)。

如果您存储到该空间的字节无效 T对象表示,访问它们时可能会出现未定义的行为。究竟哪些字节序列构成了有效的T对象表示有点灰色区域;至少你应该能够将一个普通可复制类型的对象的底层字节可移植地写入文件,并成功地将它们读回到相同类型的对象的底层字节中。

出于偏执狂的缘故,我可能会:

static_assert(std::is_trivially_copyable<T>(),
"NO NO NO - T MUST BE TRIVIALLY COPYABLE!");

file.read 之前面向 future 。

关于c++ - 一次将文件读入 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28888906/

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