37得票1回答
一个迭代器_trait的典型用例是什么?

我是新手,对C++不太熟悉,请多包涵。我正在尝试理解STL iterator_traits。在书籍《C++标准库》中,结构体iterator_traits被定义如下: template <class T> struct iterator_traits { typedef ty...

34得票1回答
在没有std::contiguous_iterator_tag的情况下,你如何检测连续迭代器?

C++17引入了ContiguousIterator的概念http://en.cppreference.com/w/cpp/iterator。 然而,似乎没有计划通过std::iterator_traits<It>::iterator_category报告contiguous_it...

23得票2回答
为什么std::iterator_traits::value_type即使是const_iterator也是非const的?

为什么要使用STL? std::iterator_traits<const T*>::value_type 与之相同的类型 std::iterator_traits<T*>::value_type 为什么设计是这样的?第一个不应该是const T而第二个只需...

22得票4回答
为什么back_insert_iterator/front_insert_iterator/insert_iterator的value_type/difference_type/pointer/reference都是void?

在我的项目中,我想将流分成一些给定类型的值,因此我实现了一个模板函数,如下:template <typename TElem, typename TOutputIter> TOutputIter SplitSpace(std::istream& IS, TOutputIte...

14得票1回答
iterator_category和iterator_concept之间有什么区别?

C++20带来了一个更强大的迭代器系统,其中之一是在迭代器类别的基础上引入了iterator_concept。 我发现C++20中许多迭代器的iterator_concept和iterator_category不一致。以最著名的iota_view为例。 using R = decltype...

13得票3回答
为什么我无法从iterator_traits获取value_type?

我正在做这件事:const int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; const auto foo = cbegin(arr); const typename iterator_traits<decltype(f...

11得票2回答
为什么reverse_iterator要双重定义其嵌套类型?

看起来迭代器适配器reverse_iterator在其嵌套类型中定义了大部分的重复。特别地,它公开继承自std::iterator,该类公开了iterator_category,value_type,difference_type,pointer和reference。除了iterator_ca...

11得票4回答
专门化迭代器特性。

我希望为不具有通常嵌套的typedef(例如value_type,difference_type等)且源码无法修改的容器类模板的迭代器专门化std :: iterator_traits<>。基本上,我想做这样的事情: template &lt;typename T&gt; struct it...

11得票2回答
为什么算法使用 iterator_traits<T>::value_type 而不是 iter::value_type?

在算法中,我可以通过迭代器直接确定value_type,即iter::value_type。为什么算法要使用iterator_traits来做同样的事情呢? #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;iter...

10得票1回答
前向迭代器是输出迭代器吗?

前向迭代器是否必须是输出迭代器?我的当前STL实现(VS2012)将 forward_iterator_tag 同时从 input_iterator_tag 和 output_iterator_tag 派生,但我在标准[N3485]中找不到这个要求。