gpt4 book ai didi

c++ - 连续内存的输入迭代器?

转载 作者:搜寻专家 更新时间:2023-10-31 00:40:12 24 4
gpt4 key购买 nike

我正在尝试为 vector 添加一些调试工具。我的类(class)“有一个” vector 并提供如下功能:

template <typename InputIterator>
void assign(InputIterator first, InputIterator last)

vector 和字符串是具有连续内存的容器。当 firstlast 来自 vector (或其他具有连续内存的容器)时,我可以对迭代器执行额外的健全性检查。例如,我可以检查:

  • 最后>第一个
  • [first, last) 不要与现有元素重叠
  • count = last - first + 1 是理智的

我想在容器使用连续内存时为额外的诊断和检测提供专门化,但我不知道迭代器叫什么(并且无法通过源代码查找它):

template <typename SequentialIterator>
void assign(SequentialIterator first, SequentialIterator last)

“SequentialIterator”或“ContiguousIterator”的名称是什么?

最佳答案

您可以使用标记分派(dispatch)和一些标准类型特征来根据迭代器的类别选择适当的 assign() 实现。

例如,这个基本解决方案允许您为随机访问迭代器和非随机访问迭代器提供两种不同的实现:

#include <type_traits>
#include <iterator>

struct X
{
template <typename InputIterator>
void assign(InputIterator first, InputIterator last)
{
assign_impl(
first, last,
typename std::iterator_traits<InputIterator>::iterator_category()
);
}

template <typename InputIterator>
void assign_impl(InputIterator first, InputIterator last,
std::random_access_iterator_tag)
{
// Implementation for random access iterator...
}

template <typename InputIterator>
void assign_impl(InputIterator first, InputIterator last,
std::input_iterator_tag)
{
// Implementation for non-random access iterator...
}
};

关于c++ - 连续内存的输入迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15148229/

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