gpt4 book ai didi

c++ - 如何检查迭代器是否形成连续的内存区域?

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

我目前有以下函数来读取数组或原始数据 vector (_readStream 是一个 std::ifstream):

template<typename IteratorType> 
inline bool MyClass::readRawData(
const IteratorType& first,
const IteratorType& last,
typename std::iterator_traits<IteratorType>::iterator_category* = nullptr
)
{
_readStream.read(reinterpret_cast<char*>(&*first), (last-first)*sizeof(*first));
return _readStream.good();
}

第一个问题:这个功能对你来说合适吗?

当我们直接读取一 block 内存时,只有当从firstlast 的内存块在内存中是连续的时,它才会起作用。如何检查?

最佳答案

撇开示例函数不谈,如果不检查两者之间每个元素的地址,您永远无法完全确定迭代器将形成连续的内存。

不过,一个合理的完整性测试是检查两者之间的内存区域是否与两者之间的计数相同:

assert(&*last - &*first == last - first &&
"Iterators must represent a contiguous memory region");

关于c++ - 如何检查迭代器是否形成连续的内存区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658384/

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