c++ - 为什么我们使用迭代器类别而不是相应地重载迭代器?
问题描述
考虑一个典型的(简化的)std::advance
迭代器函数实现:
template<typename Iterator,typename Dist>
void advance(Iterator& it, Dist n)
{
typedef std::iterator_traits<Itarator>::iterator_category c;
advance_impl(it, n, c);
}
template<typename Iterator, typename Dist>
void advance_impl(Iterator& it, Dist n, std::random_access_iterator_tag)
{
it += n;
}
template<typename Iterator, typename Dist>
void advance_impl(Iterator& it, Dist n, std::input_iterator_tag)
{
while (n--)++it;
}
我知道我们可以advance_impl
使用 分支在一个函数中编写所有constexpr if
内容,但让我们暂时搁置一下。
为什么我们使用它而不是仅仅std::advance
为相应的迭代器重载?为什么我们在这里需要特质?
解决方案
推荐阅读
- sql - 如何从多个用户 ID 中获取 30 个最新结果
- amazon-dynamodb - 更新表达式无效:两个文档路径相互重叠 Appsync
- java - 有没有办法在 Java 中将 Else 与 Catch 结合起来?
- reactjs - SWR,围绕 useSWR 钩子创建一个包装器以显示加载状态
- installation - 如何重新定位 Inno Setup 的卸载程序?
- neovim - Nvim lsp - 更改 lspconfig 诊断消息位置
- amazon-web-services - EKS 中的持久存储无法配置卷
- python - 从 Python 中的 Pandas DataFrame 中随机删除 n 个连续的、不重叠的行
- r - R:while 和 if-else 循环
- docker - 如何创建两个共享代码和资产的 NestJS 存储库?