Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.71
Romiys
3 / 3 / 0
Регистрация: 27.12.2010
Сообщений: 56
#1

Итератор ? - C++

16.08.2011, 16:27. Просмотров 6545. Ответов 40
Метки нет (Все метки)

Как выглядит итератор на вложеный контейнер? Например осуществить доступ к 1-му символу 3-го элемента в векторе vector< <vecrot<char> > vec через индекс можно так vec[2][0]. А как через итератор?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2011, 16:27     Итератор ?
Посмотрите здесь:

Итератор - C++
#include &lt;iostream&gt; #include &lt;list&gt; using namespace std; list&lt;int&gt;::iterator pos (list&lt;int&gt; a,list&lt;int&gt;::iterator it) { for (it;...

Итератор - C++
Добрый день. Я начинающий. Есть проект пытаюсь сделать построение-отладку выдает ошибку типа: Ошибка 1 error C2061: синтаксическая...

Итератор - C++
Вот задача: Реализовать шаблон упорядоченного массива как двусвязного списка. Операцию доступа по индексу заменить итератором. Вопрос:...

итератор - C++
Привет всем! подскажите пожалуйста литературу где подробно описана реализация итераторов ...

Итератор!!!!! - C++
Есть такое задание: Разработать класс «Итератор», который должен содержать конструктор и функции просмотра текущего элемента, перехода к...

Итератор С++ - C++
помогите пожалуйста написать итератор, накапливающий сумму пройденных элементов!!!

итератор - C++
скажите как в этой задачи перевести десятичное число в двоичное??? вот условие задачи!!! вот код!! main.h #include &lt;cstdlib&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
19.08.2011, 00:59     Итератор ? #31
Romiys, чтото вроде этого
http://www.open-std.org/jtc1/sc22/wg...2005/n1905.pdf
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
19.08.2011, 12:20     Итератор ? #32
Итератор для "вложенного" контейнера выглядит точно также, как итератор на не вложеный контейнер.

Аналогично, индексация вложеного во что-то массива не зависит от того, куда этот массив вложен.

Если у вас массив строк, то итератор для прохода по символам отдельной строки не будет иметь особенность связанную с тем, что эта строка находится в массиве. Один итератор можно последовательно применить как строкам из массива, так и к любым другим строкам.
Сыроежка
Заблокирован
19.08.2011, 21:39     Итератор ? #33
Цитата Сообщение от ForEveR Посмотреть сообщение
Сыроежка, Скорее вы. Вам одно говорят, вы другое отвечаете. Говорилось, что контейнеров стандартных много, а не только вектор. Итератор не есть указатель. А reverse_iterator не сможет работать с простым указателем. Но вы все переиначили и опять пытаетесь выставить человека дураком. Учите ка С++, а не учите других.
Я устал вам повторять одно и тоже :
C++
1
учите итераторы в С++, вы совершенно не понимаете этого раздела языка!
reverse_iterator очень хорошо работает с простыми указателями!

Добавлено через 1 минуту
Цитата Сообщение от Deviaphan Посмотреть сообщение
Только оператор разыменования, инкремент и декремент. Т.е. в тексте выглядит похоже, не спорю, но на этом схожесть заканчивается.
Я устал уже вам писать по десять раз одно и тоже. Итератор произвольного доступа ничем не отличается от указателя. Повторяю, если с десятого раза не поняли, ничем! Потому что указатель - это частный случай итератора с произвольным доступом!

Добавлено через 3 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
Сыроежка, Скорее вы. Вам одно говорят, вы другое отвечаете. Говорилось, что контейнеров стандартных много, а не только вектор. Итератор не есть указатель. А reverse_iterator не сможет работать с простым указателем. Но вы все переиначили и опять пытаетесь выставить человека дураком. Учите ка С++, а не учите других.
Такое впечатление, что у вас не все в порядке с умс твенными способностями, и вы не в состоянии понять, тчто я пишу. Я нигде не говорил, что итератор - это указатель. Я говорил, что итератор произвольного доступа ничем не отличается по функциональным возмодносятм от указателя, так как указатель - это частный случай итератора с произвольным доступом!

Добавлено через 1 минуту
Цитата Сообщение от Romiys Посмотреть сообщение
Скажите пожалуйста на счёт : " в самом начале главы "Итераторы" стандарта ..." Что это за учебник? Если можно скинте,пожалуйста, ссылочку
Это не уцчебник, а описание стандарта языка С++. Глава 24 описывает итераторы.
silent_1991
19.08.2011, 21:53
  #34
 Комментарий модератора 
Цитата Сообщение от Сыроежка Посмотреть сообщение
вы совершенно не понимаете этого раздела языка!
Цитата Сообщение от Сыроежка Посмотреть сообщение
Такое впечатление, что у вас не все в порядке с умс твенными способностями
Вам уже говорили, что вы не в праве оценивать чужие умственные способности и громко кричать направо и налево, что никто ничего не знает, кроме вас. Вам говорил это модератор, и оформил это предупреждение специальным тегом. Это автоматически означает устное замечание. Теперь о том же самом говорю вам я. В следующий раз увижу подобное - будет вам жёлтая карточка. Потом красная. Потом будем принимать более жесткие меры.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.08.2011, 08:43     Итератор ? #35
Цитата Сообщение от Сыроежка Посмотреть сообщение
reverse_iterator очень хорошо работает с простыми указателями!
ForEveR не точно выразился. reverse_iterator не может быть заменён указателем. Он это имел в виду.
Чтобы заменить reverse_iterator на указатель, нужно полностью переписывать логику работы программы.

Цитата Сообщение от Сыроежка Посмотреть сообщение
Итератор произвольного доступа ничем не отличается от указателя.
reverse_iterator для вектора является итератором произвольного доступа и не имеет ничего общего с указателем, кроме вышеназванных операций. То, что для вектора итератор (иногда) является указателем, это просто особенность реализации, которой может и не быть.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
20.08.2011, 19:28     Итератор ? #36
Сыроежка, Итератор не является понятием исключительно С++. Итератор - паттерн. Он используется во множестве языков (например Java, C#, Python), в которых нет указателей вообще. Поэтому не надо привязывать паттерн к одному языку и говорить, что итератор и указатель не отличаются. Даже в контексте CPP это не одно и то же, что вам уже говорят 4 страницы.
Сыроежка
Заблокирован
20.08.2011, 21:28     Итератор ? #37
Цитата Сообщение от Deviaphan Посмотреть сообщение
ForEveR не точно выразился. reverse_iterator не может быть заменён указателем. Он это имел в виду.
Чтобы заменить reverse_iterator на указатель, нужно полностью переписывать логику работы программы.


reverse_iterator для вектора является итератором произвольного доступа и не имеет ничего общего с указателем, кроме вышеназванных операций. То, что для вектора итератор (иногда) является указателем, это просто особенность реализации, которой может и не быть.
И что из тогго, что reverse_iterator не может быть заменен указателем? В чем глубокий смысл этого утверждения?! reverse_iterator - это шаблонный класс, поэтому очевидно не может быть заменен простым указателем. Только что это меняет в определении итераторов?!!!
А вторая ваша фраза - это вообще какая-то бессмыслица. reverse_iterator для обычного указателя также является итератором произвольного доступа.

Я уже сказал, что такое впечатление, что имею дело с совершенно неадекватными людьми. Зря модератор корректировал мое сообщение. Я как раз вам и говорил, что эта "особенность реализации" итераторов для вектора как раз и говорит, что итераторы являются обощением указателей, и что вы не в состоянии определить, имеете ли вы дело с обычным указателем или со специальным классом, написанным для вектора, если не посмотрите конкретно реализацию вектора.

Об этом и речь.

Честно говоря, я не знаю, сколько вам раз нужно повторять одно и тоже. Я уже это повторил не меньше 5 раз. Так что проблема данной дискуссии - это проблема того, насколько вы воьбще способны понимать, что вам пишут.
Я вам ранее написал, что итератор вектора может быть реализован либо в виде класса, либо в виде обычного указателя. Сейчас вы по прошествии с десяток сообщений, фактически, цитируете меня, правда сами не понимаете смысла того, что вы процитировали, и что эта цитата подтверждает.
До этого вы вообще утверждали, что reverse_iterator нельзя использовать с обычными указателями.

Меня всегда поражает в подобных дискуссиях одно: почему-то невежды, которые имеют обрывочные знания о языке С++ особенно агрессивны и упрямы. Вместо того, чтобы спросить, например, как применить reverse_iterator к обычному указателю, они начинают нести ахинею, что reverse_iterator нельзя применить к обычным указателям.

Добавлено через 23 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
Сыроежка, Итератор не является понятием исключительно С++. Итератор - паттерн. Он используется во множестве языков (например Java, C#, Python), в которых нет указателей вообще. Поэтому не надо привязывать паттерн к одному языку и говорить, что итератор и указатель не отличаются. Даже в контексте CPP это не одно и то же, что вам уже говорят 4 страницы.
Во-первых, мы обсуждаем С++. С++ и Java - это к вашему сведению разные языки! А в разных языках разные концепции. Могут использоваться одни и теже термины, но тем не менее эти термины будут нести различную семантическую нагрузку.
И я не говорил нигде, что итератор и указатель это одно и тоже. Это вы просто не в состоянии понять, что вам пишут, и что заложено в С++. Я говорил, что в С++ ( обратите внимание на такое странное для вас обозначение, как С++) итератор - это обобщение указателя. Я говорил, что вы можете итератором произвольного доступа заменить указатель и наоборот. И наглядной демонстрацией этого служит реализация шаблонного класса вектор в разных компиляторах, когда в одних случаях используется для вектор обычный указатель, а в других случаях разработчики компилляторов пишут класс итератора.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
20.08.2011, 21:29     Итератор ? #38

Не по теме:

Сыроежка, Сказали ведь, что я не то имел ввиду. Прекрасно можно применить.

Я вот единственное вам посоветую. Быть проще. Может и ЧСВ в норму придет. Удачи.



А в разных языках разные концепции.
Итератор является паттерном для обхода коллекции, не вдаваясь в интерфейс этого контейнера. Это отнюдь не концепция С++. Итератор в Java похож на итератор в остальных языках по действию (если не вдаваться в детали реализации). А реализация может быть какая угодно.
alex_x_x
20.08.2011, 21:38
  #39

Не по теме:

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

Сыроежка
Заблокирован
20.08.2011, 21:47     Итератор ? #40
Цитата Сообщение от ForEveR Посмотреть сообщение

Не по теме:

Сыроежка, Сказали ведь, что я не то имел ввиду. Прекрасно можно применить.

Я вот единственное вам посоветую. Быть проще. Может и ЧСВ в норму придет. Удачи.





Итератор является паттерном для обхода коллекции, не вдаваясь в интерфейс этого контейнера. Это отнюдь не концепция С++. Итератор в Java похож на итератор в остальных языках по действию (если не вдаваться в детали реализации). А реализация может быть какая угодно.
И что в вашем сообщении того, что противоречит тому, что мною было сказано ранее?!! Я говорил, что итератор - это обобщение указателя. И чем же ваше утверждение противоречит моему высказыванию. С чем вы спорите, можете сказать? Я точно также говорил, что нельзя различить в классе вектор, как реализован итератор: в виде класса или обычного указателя.
Так что вы собираетесь в моих высказываниях опровергнуть?
Но более того, как я уже сказал, у вас проблемы с пониманием того, что вам пишут! Я не говорил, что итератор - это концепция С++! Я говорил, что одинаковые термины в разных языках имеют серьезные семантические различия! Так что нельзя безусловно переносить одинаковый термин из одного языка в другой. Кто-то здесь говорил, что в другом языке, не С++, вообще нет указателей! А в С++ указатели есть, и указатель является частным случаем итераторов, то есть является итератором произволбного доступа.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2011, 00:04     Итератор ?
Еще ссылки по теме:

итератор - C++
Привет. Не получается создать итератор. std::vector&lt;std::list&lt;size_t&gt; &gt; adjacentList; если пишу так ...

Вектор и итератор - C++
Почему где не смотрел всегда содержимое вектора смотрят через итераторы)) Решил попробывать как всегда стандартным проежженым способом. ...

Вектор и итератор с++ - C++
//////////////////// /////////// Задание: Элементы вектора D случайным образом перемешаны. Элементы ki вектора K /////////// указывают...

Потоковый итератор - C++
Добрый день. Читаю книгу Объектно-ориентированное программирование в С++ Лафоре, там приводится такой код: #include &lt;iostream&gt; ...

Итератор в <vector> - C++
Всем привет! Помогите пожалуйста советом. У меня есть вектор, содержащий символьные значения (кол-во символов заранее не известно, их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
21.08.2011, 00:04     Итератор ? #41
Сыроежка, Невозможно?) Бугага.
Скомпилируйте в компиле, где итератор вектора указатель следующий код.

C++
1
2
3
4
5
int array[] = {1,2,3,4,5};
std::vector<int> vec(array, array + sizeof(array) / sizeof(*array));
std::vector<int>::iterator iter = vec.begin();
std::vector<int>::iterator iter2 = vec.begin();
std::cout << iter.operator==(iter2) << '\n';
Успехов.

Добавлено через 1 час 3 минуты
указатель является частным случаем итераторов, то есть является итератором произволбного доступа.
Аццкий бред. Указатели были в Си, когда еще не было паттерна итератор. Поэтому так говорить попросту нельзя.
Yandex
Объявления
21.08.2011, 00:04     Итератор ?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru