Описание тега iterator-traits

2 ответа

Можно ли сделать move_iterator из istream_iterator?

Рассмотрим следующий код: typedef istream_iterator<char> char_itr ; char_itr eos; string ll("some text here"); istringstream line_in(ll); char_itr start(line_in); move_iterator<char_itr> mstart(start); // !!! move_iterator<char_itr&gt…
1 ответ

Обнаружение смежных итераторов

C++17 представил концепцию ContiguousIterator http://en.cppreference.com/w/cpp/iterator. Однако не похоже, что есть планы contiguous_iterator_tag (так же, как мы сейчас имеем random_access_iterator_tag) сообщает std::iterator_traits<It>::itera…
17 мар '17 в 07:47
2 ответа

const_iterator и constness const_iterator::value_type

Почему в STL std::iterator_traits<const T*>::value_type тот же тип, что и std::iterator_traits<T*>::value_type Почему так устроено? Не должно ли первое быть const T, а второе - только T? Как вы должны принять базовый константный правильн…
10 окт '12 в 12:31
1 ответ

Почему decltype() возвращает указатель на ссылку?

Я пытаюсь получить лучшее представление о iterator_traits и нашел фрагмент кода в учебнике C++. Поэтому я добавил некоторый код, чтобы сделать его исполняемым с целью понимания поведения указанного механизма компиляции. Полная программа выглядит так…
31 авг '17 в 11:27
4 ответа

Почему все значения / тип_ различия / указатель / ссылка back_insert_iterator/front_insert_iterator/insert_iterator все недействительны?

В моем проекте я хочу разделить поток на значения определенного типа, поэтому я реализую функцию шаблона как template <typename TElem, typename TOutputIter> TOutputIter SplitSpace(std::istream& IS, TOutputIter result) { TElem elem; while (…
23 апр '13 в 09:23
2 ответа

Почему reverse_iterator вдвойне определяет свои вложенные типы?

Похоже, что адаптер итератора reverse_iterator вдвойне определяет большинство его вложенных типов. В частности, оно наследуется публично от std::iterator который выставляет iterator_category, value_type, difference_type, pointer а также reference, З…
2 ответа

Переопределение методов map и flatMap в классе, расширяющем черту Iterator

Как начинающий Scala, я пытаюсь реализовать счетчик для каждого элемента Iterator извлекается и обрабатывается в for Выражение, а также счетчик увеличиваются каждый раз, когда начинается новая итерация по одному из "циклов" выражения (внешний цикл и…
18 апр '15 в 12:35
3 ответа

Использование iterator_traits для вывода типа значения из пары итераторов

У меня есть тип typedef std::pair<ConstIterator, ConstIterator> Range; с typedef typename std::vector<T>::const_iterator ConstIterator; Теперь я хотел бы использовать std::iterator_traits для определения типа, на который указывают итерат…
13 авг '15 в 15:02
3 ответа

Есть ли пример итератора, который не использовал бы ptrdiff_t в качестве его diff_type?

Я вижу это iterator_traits всегда определяет difference_type: https://en.cppreference.com/w/cpp/iterator/iterator_traits Мне просто интересно, почему бы не ptrdiff_t для каждого типа? Есть ли пример итератора, который не использует ptrdiff_t? И если…
1 ответ

Расхождение std::iterator_traits между libstdC++ и libC++

Дано: struct Iter { using value_type = int; using difference_type = int; using reference = int; using pointer = int; using iterator_category = int; }; Следующее прекрасно работает с libstC++, но не компилируется с libC++ 5.0.0: #include <iterator…
1 ответ

Функция, которая принимает любой индексируемый тип данных в качестве аргумента

Я пытаюсь сделать функцию, которая может принимать любой класс, который принимает [] оператор. Я хотел бы, чтобы он мог принять: Массивы либо по ссылке, либо по значению Векторы или любой другой контейнер, который можно проиндексировать В результате…
20 дек '17 в 17:52
4 ответа

Специализирующий iterator_traits

Я хотел бы специализироваться std::iterator_traits<> для итераторов шаблона класса контейнера, который не имеет обычных вложенных типов (например, value_type, difference_typeи т. д.) и чей источник я не должен изменять. В основном я хотел бы с…
0 ответов

Как использовать std::iterator_traits для моего пользовательского контейнера

Я реализую deque, имеющий следующую структуру: template<typename T, template<typename...> class Container = std::vector> class Deque { public: void push_front(const T& obj); void emplace_front(T&& obj); void push_back(const T…
24 фев '17 в 16:21
1 ответ

Нет типа с именем value_type в чертах итератора

Я пытаюсь написать набор связанных списков, совместимый со стандартной библиотекой, и получаю ошибку, которую не могу понять. #include <iterator> #include <cstddef> template <typename T> class SetList{ struct ListNode{ T data; List…
04 дек '18 в 07:23
2 ответа

Вывод категории итератора из переменных параметров

Как я могу заполнить ??? template<class...Itrs> struct itr_category { typedef /* ??? */ type; }; чтобы type является наиболее специализированным из iterator_traits<Itrs>::iterator_category... который поддерживает все Itrsоперации, иначе …
02 авг '12 в 06:18
1 ответ

Каковы типичные случаи использования iterator_trait

Я новичок в C++, поэтому, пожалуйста, потерпите меня. Я пытаюсь понять STL iterator_traits. В книге "Стандартная библиотека C++" структура iterator_traits определена следующим образом: template <class T> struct iterator_traits{ typedef typenam…
19 июл '11 в 03:30
2 ответа

Нет типа с именем указатель в структуре std::iterator_traits<...>

Вот фрагменты моего шаблона connected_list: #include &lt;iostream&gt; #include &lt;iterator&gt; template &lt; class &gt; struct linked_list { struct iterator_base : public std::iterator&lt; std::bidirectional_iterator_tag , int &gt; { typename std::…
28 окт '16 в 18:31
1 ответ

Параметры шаблона не используются при частичной специализации

У меня есть следующий код: template&lt;typename T, typename Allocator = std::allocator&lt;T&gt; &gt; class Carray { // ... typedef T* pointer; typedef pointer iterator; // ... }; Сейчас я пытаюсь сделать частичную специализацию для iterator_traits, …
18 июн '11 в 21:09
4 ответа

Круговая перестановка с двумя итераторами

Мне нужно сделать круговую перестановку списка, например, у меня есть: (a,b,c,d,e) я хочу (e,a,b,c,d). Но мне не удается это сделать, вот что я попробовал: #ifndef ALGORITHME_H #define ALGORITHME_H template&lt;typename I&gt; void permutationCirculai…
17 дек '14 в 18:07
2 ответа

Проверка итератора

Я работаю в проекте C++03. И я беру итератор в шаблон. Мне нужно утверждать, что этот итератор ссылается на определенный тип. Предоставляет ли мне C++ способ сделать это помимо написания моей собственной структуры для проверки? То, что я хочу, являе…
05 авг '15 в 13:13