#SimpleCode привет! Решил для себя изучить языки программирования, начал с с++. В дороге читаю Шилдта и SoloLearn(интересно узнать твое мнение про эту программу на андроиде), а вот дома практикуюсь по твоим видеоурокам - все доходчиво и понятно, спасибо за это!
Разница в использовании префиксного и постфиксного инкремента/декремента для итераторов в том, что в случае префиксного итератора, в теории, просто изменяется состояние объекта, и потом он возвращается, а при использовании постфиксного инкремента, состояние также изменяется, но возвращается объект с предыдущим состоянием, т.е. для этого компилятору необходимо создать ещё 1 объект. Это влияет на скорость работы. Но, вроде как современные компиляторы уже могут сами оптимизировать подобные случаи, и скорость работы не отличается. Но для себя я всё же сделал вывод, что если использование префиксного и постфиксного инкремента не влияет на правильность ответа, то предпочтительно использовать префиксный инкремент.
Если мы хотим только увеличить значение итератора, то получается, что префиксная форма предпочтительна. Поэтому, один из советов по микро-оптимизации программ писать «for (it = a.begin(); it != a.end; ++it)» вместо «for (it = a.begin(); it != a.end; it++)». В последнем случае происходит создание ненужного временного объекта, что снижает производительность. Скорость работы в Release версии: iterator++. Total time: 0.87779 ++iterator. Total time: 0.87753 А теперь ответим на вопрос, зачем же тогда стоит менять it++ на ++it. Замерим скорость работы Debug версии: iterator++. Total time: 83.2849 ++iterator. Total time: 27.1557
Большое спасибо за ваши уроки! Вы помогли мне сдать программирование на 1 курсе)) Так понятно и доходчиво не всякий преподаватель объяснить сможет. Всего вам наилучшего, очень рада, что наткнулась на вас😀👍
Постфиксный инкремент обременен задачей сохранения и возврата старого значения итератора. Это требует времени и усилий, что, как правило, делает его медленнее.
Уже до этого видео интересовался таким вопросом, поэтому знаю ответ: префиксный инкремент сначала увеличит переменную на единицу, а потом вернет значение, а постфиксный вернет текущее значение переменной и прибавит единицу переменной. в цикле for разницы между ними никакой, потому что итератор не используются во время использования оператора
Постификсный оператор инкремента, возвращает значение с запозданием, которое будет лишь копией инкрементируемой сущности. Префиксный непосредственно возвращает инкрементируемую сущность
Разница между префиксным и постфиксным инкрементом заключается в том, когда происходит увеличение значения итератора. Префиксный инкремент выполняет операцию увеличения итератора и затем возвращает новое значение. Например, если у нас есть итератор i со значением 3, то префиксный инкремент ++i увеличит i до 4 и вернет 4. Постфиксный инкремент также выполняет операцию увеличения итератора, но возвращает его старое значение. Например, если у нас есть итератор i со значением 3, то постфиксный инкремент i++ вернет 3 и затем увеличит i до 4. В большинстве случаев разница между использованием префиксного и постфиксного инкремента не имеет большого значения. Однако есть некоторые ситуации, когда это может быть важно. Например, если мы используем итератор в цикле и хотим, чтобы его значение увеличивалось перед выполнением каждой итерации, то нам следует использовать префиксный инкремент. Если же нам нужно использовать значение итератора до его увеличения, то нам следует использовать постфиксный инкремент.
ну так оно звучит, но почему тогда, используя префиксную инкрементацию, мы не пропускаем первый элемент коллекции? то есть мы получаем указатель на begin, дальше идет инкрементации и по идее в этой итерации мы были бы должны использовать уже следующий элемент.
Разница постфиксого и префиксного инкремента в циклах в том, что когда постфиксный, то i будет итерироваться в конце тела цикла, а префиксного в том, что сначала i итерируется, а только потом происходит тело цикла
разница в том, что в в префиксном итераторе итератор увеличеваеться и уже увеличенное значение возвращаеться. В случае постфиксновго итреатора значение увеличеваеться но возвращеться старое значение. Это сделано таки образом потому что так работают итератори для простих типов.
Благодарю! Уважаемый, Сергей! Я так понимаю list и массивы это что не совсем связанное друг с другом(#include #include #include using namespace std; int main() { setlocale(LC_ALL, "ru"); int jq, temp; cout jq; int *arr = new int(); for (int i = 0; i < jq; i++) { arr[i]; cout
префиксный инкремент предподчтительней в работе с итераторами так как он изменяет объект и возвращает его, в случае с постфиксным инкрементом итератора - состояние объекта должно измениться, но создается лишний объект
Префиксный итератор изменяет состояние обьекта ,а постфиксный итератор состояние также изменяет, но возвращается объект с предыдущим состоянием и ему надо создавать новый обьект
Спасибо! Для list Можно сделать экземпляр, где можно перегрузить [] и пользоваться как обычным массивом- с этим вроде проблем нет. А как вот делегировать конструктор в базовый list и сделать, что бы при обьявлении было, что вроде этого: my_List﹤int﹥ lst1 { 10, 20, 40 } пока не понял.
постфиксный вначале создаёт копию переменной, псоле увеличивает её на единицу и только после выполнения всей инструкции происходит подмена оригинала копией.
Подскажите, пожалуйста, как в функции print, без использования auto, инициализировать константный итератор. list::const_iterator i=list.cbegin() Что здесь не так?
Считается ли то, что я нашел информацию на тему разницы постфиксного и префиксного инкремента путем того, что просто посмотрел следующее видео (Так то информацию я нашел)
Спасибо, разрешите вопрос: если я заполняю list объектами произвольного класса, или даже просто строковыми значениями String, то как будет работать myList.sort() ? Как сортировка поймет что больше, а что меньше ?
@@yashmerino А с классами? В данный момент мучаюсь, внутри листа лежат структуры, и не возможно получить доступ к внутреннему элементу такой структуры. Нужны сортировки по разным полям.
@@yashmerino В общем оказывается ее нужно было взять в скобки. Меня смутило что cout без скобок выводит содержимое, думал можно к указателю прямо обращаться.
Не пойму почему они не могли перегрузить оператор [ ] . Столько разных методов , даже блин перевернуть коллекцию можно, а элементарного оператора [ ] нет ...
Спасибо за урок. У меня какая то не понятная проблема. У меня class list не подключается и программа не распознает не List не ее объект. Сам написал класс как мы это делали все работает когда вот так List myList; Но когда присваиваю значение как массиву List myList = { 54, 17, 3 }; уже не работает. Кто может помочь почему #include не помогает? Спасибо.
После 24:50 не понял.... Как бы..мы взяли первый элемент второго листа, и последный элемент первого, тоисть 19 и 99... И оно должно было показывать 99 по 19 штук....не?
всем привет. может кто подскажет, если в list не реализован итератор свободного доступа, как мы перенаправляем наш итератор с помошью инкремента (it++), и почему тогда если мы можем перенаправить с помошью инкремента, то не работает запись (it+=1; или it=it+1), ведь по сути эти записи (it+=1; или it=it+1) равносильны записи (it++). ??
*Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)*
#SimpleCode привет! Решил для себя изучить языки программирования, начал с с++. В дороге читаю Шилдта и SoloLearn(интересно узнать твое мнение про эту программу на андроиде), а вот дома практикуюсь по твоим видеоурокам - все доходчиво и понятно, спасибо за это!
Разница в использовании префиксного и постфиксного инкремента/декремента для итераторов в том, что в случае префиксного итератора, в теории, просто изменяется состояние объекта, и потом он возвращается, а при использовании постфиксного инкремента, состояние также изменяется, но возвращается объект с предыдущим состоянием, т.е. для этого компилятору необходимо создать ещё 1 объект. Это влияет на скорость работы. Но, вроде как современные компиляторы уже могут сами оптимизировать подобные случаи, и скорость работы не отличается. Но для себя я всё же сделал вывод, что если использование префиксного и постфиксного инкремента не влияет на правильность ответа, то предпочтительно использовать префиксный инкремент.
Примерно знал что именно так , Но этот ответ более адекватный и понятный нежели мой ! Спасибо !
честно говоря я сидел вахуе что такой элементарный момент спрашивается при том что был "урок" с материалом на тему перегрузки элементов
@@CharaVerKys честно говоря, я в ахуе, что 5 лет назад я мог высерать такие формулировки из своей ныне тупой головы
@@CharaVerKys он его спросил скорей всего чтобы люди которые забыли этот урок вспомнили его
Крут, молодец
Если мы хотим только увеличить значение итератора, то получается, что префиксная форма предпочтительна. Поэтому, один из советов по микро-оптимизации программ писать «for (it = a.begin(); it != a.end; ++it)» вместо «for (it = a.begin(); it != a.end; it++)». В последнем случае происходит создание ненужного временного объекта, что снижает производительность.
Скорость работы в Release версии:
iterator++. Total time: 0.87779
++iterator. Total time: 0.87753
А теперь ответим на вопрос, зачем же тогда стоит менять it++ на ++it. Замерим скорость работы Debug версии:
iterator++. Total time: 83.2849
++iterator. Total time: 27.1557
Большое спасибо за ваши уроки! Вы помогли мне сдать программирование на 1 курсе)) Так понятно и доходчиво не всякий преподаватель объяснить сможет. Всего вам наилучшего, очень рада, что наткнулась на вас😀👍
А сейчас есть программирование ?
Огромное спасибо!!!! Единственный канал где возможно выучить С++, пожалуйста не останавливайся))
Спасибо Сергей за ваши труды!
Огромное спасибо Сергей! Отличный урок! Лайк! Просим продолжения по С++.
Спасибо за бесценный труд!)
Контент в кайф давай ещё по больше такого, не останавливайся
Спасибо большое за отличный урок, и задание для самообучения!
Спасибо за урок!
спасибо за урок)двигаемся дальше, сложно но это того стоит
Огромное спасибо за предоставленную информацию!
#liststl #SimpleCode #урокипрограммирования
Постфиксный инкремент обременен задачей сохранения и возврата старого значения итератора. Это требует времени и усилий, что, как правило, делает его медленнее.
Уже до этого видео интересовался таким вопросом, поэтому знаю ответ:
префиксный инкремент сначала увеличит переменную на единицу, а потом вернет значение, а постфиксный вернет текущее значение переменной и прибавит единицу переменной.
в цикле for разницы между ними никакой, потому что итератор не используются во время использования оператора
У меня потребовалось использовать template , только так заработало, по другому никак!
Спасибо за урок.
Хочу добавить, что метод erase возвращает итератор на следующий элемент после удаляемого
спасибо!
Спасибо Сергей за уроки!
12:50 Без разници, для цикла For нет значения - постфиксный или префиксный инкремент вы используете.
есть разница. Хоть вывод одинаковый - процессор намного больше
Спасибо за качественный контент
Постификсный оператор инкремента, возвращает значение с запозданием, которое будет лишь копией инкрементируемой сущности. Префиксный непосредственно возвращает инкрементируемую сущность
Спасибо за урок
Ещё интересны методы - splice и merge, но я думаю они не так часто используются, а видеоурок увеличился бы минут на 20
А зачем нужны эти методы?
тебя вся моя школа смотрит!!!!!!!!!
@Данил Гущин +
спасибо крутые ролики.... ты топ
572 это как мем с цифрой 6 и подписью "четыре"
Спасибо за урок)
Постфиксный итератор возвращает еще и предыдущее значение, в отличие от префиксного, из-за чего при дебаге уменьшается скорость работы.
Разница между префиксным и постфиксным инкрементом заключается в том, когда происходит увеличение значения итератора.
Префиксный инкремент выполняет операцию увеличения итератора и затем возвращает новое значение. Например, если у нас есть итератор i со значением 3, то префиксный инкремент ++i увеличит i до 4 и вернет 4.
Постфиксный инкремент также выполняет операцию увеличения итератора, но возвращает его старое значение. Например, если у нас есть итератор i со значением 3, то постфиксный инкремент i++ вернет 3 и затем увеличит i до 4.
В большинстве случаев разница между использованием префиксного и постфиксного инкремента не имеет большого значения. Однако есть некоторые ситуации, когда это может быть важно. Например, если мы используем итератор в цикле и хотим, чтобы его значение увеличивалось перед выполнением каждой итерации, то нам следует использовать префиксный инкремент. Если же нам нужно использовать значение итератора до его увеличения, то нам следует использовать постфиксный инкремент.
ну так оно звучит, но почему тогда, используя префиксную инкрементацию, мы не пропускаем первый элемент коллекции? то есть мы получаем указатель на begin, дальше идет инкрементации и по идее в этой итерации мы были бы должны использовать уже следующий элемент.
Лайк однозначно!
Разница постфиксого и префиксного инкремента в циклах в том, что когда постфиксный, то i будет итерироваться в конце тела цикла, а префиксного в том, что сначала i итерируется, а только потом происходит тело цикла
В префиксной форме до использования переменной она меняется, а в постфиксной после
Спасибо вам я из 🇺🇿
Thank you !!!!!!!!!!!!!!!!!!!
Спасибо!
разница в том, что в в префиксном итераторе итератор увеличеваеться и уже увеличенное значение возвращаеться. В случае постфиксновго итреатора значение увеличеваеться но возвращеться старое значение.
Это сделано таки образом потому что так работают итератори для простих типов.
Благодарю! Уважаемый, Сергей! Я так понимаю list и массивы это что не совсем связанное друг с другом(#include
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, "ru");
int jq, temp;
cout jq;
int *arr = new int();
for (int i = 0; i < jq; i++)
{
arr[i];
cout
На сколько я помню, я много раз говорил, что лист это реализация двусвязного списка.
да, уже посмотрел урок, просто пока что работаю с javascript и уже слегка начал забывать си(
Префиксный итератор возвращает новое значение итератора, а постфиксный возвращает исходное значение итератора.🎉
дякую!
9:31 Да-да, это определённо точно закономерно и очевидно число пятьсот семьдесят два)
Здравствуйте. Не могли бы вы немного рассказать о работе с Сом портами? Было бы очень интересно.
префиксный инкремент предподчтительней в работе с итераторами так как он изменяет объект и возвращает его, в случае с постфиксным инкрементом итератора - состояние объекта должно измениться, но создается лишний объект
Префиксный итератор изменяет состояние обьекта ,а постфиксный итератор состояние также изменяет, но возвращается объект с предыдущим состоянием и ему надо создавать новый обьект
Спасибо
Спасибо! Для list Можно сделать экземпляр, где можно перегрузить [] и пользоваться как обычным массивом- с этим вроде проблем нет. А как вот делегировать конструктор в базовый list и сделать, что бы при обьявлении было, что вроде этого: my_List﹤int﹥ lst1 { 10, 20, 40 } пока не понял.
Если использовать постфиксную модель записи, тогда создастся ненужный временный обьект. Поэтому лучше использовать префиксную форму
i = 0
cout
23:00 assign
спасибо
Krasava
постфиксный вначале создаёт копию переменной, псоле увеличивает её на единицу и только после выполнения всей инструкции происходит подмена оригинала копией.
Подскажите, пожалуйста, как в функции print, без использования auto, инициализировать константный итератор.
list::const_iterator i=list.cbegin()
Что здесь не так?
list::const_iterator i=list.cbegin(), если актуально)
Считается ли то, что я нашел информацию на тему разницы постфиксного и префиксного инкремента путем того, что просто посмотрел следующее видео (Так то информацию я нашел)
Здравствуйте! А как реализовать список из объектов класса?
Спасибо, разрешите вопрос:
если я заполняю list объектами произвольного класса, или даже просто строковыми значениями String, то как будет работать myList.sort() ? Как сортировка поймет что больше, а что меньше ?
@@yashmerino А с классами? В данный момент мучаюсь, внутри листа лежат структуры, и не возможно получить доступ к внутреннему элементу такой структуры. Нужны сортировки по разным полям.
@@yashmerino В общем оказывается ее нужно было взять в скобки. Меня смутило что cout без скобок выводит содержимое, думал можно к указателю прямо обращаться.
572 убило💀
9:30
572?! 😄😄😄
Обновите ссылку в описании на двусвязный список, выдает 404
Число 572)
при префиксном не происходит создание временного объекта
ура я восьмой
а как работать с пользовательскими типами данных? как вывести их например
для класса можно перегрузить оператор
@@tabar_1312 вопрос уже не актуален, но спасибо
ахахах, 6:40 в голове прозвучал комментарий с текстом: "Ты тупой?" :D
++i - если так, то мы как бы изначально указываем на уже первый элемент в списке итератору.
Не пойму почему они не могли перегрузить оператор [ ] . Столько разных методов , даже блин перевернуть коллекцию можно, а элементарного оператора [ ] нет ...
Спасибо за урок. У меня какая то не понятная проблема. У меня class list не подключается и программа не распознает не List не ее объект. Сам написал класс как мы это делали все работает когда вот так List myList;
Но когда присваиваю значение как массиву List myList = { 54, 17, 3 };
уже не работает. Кто может помочь почему #include не помогает? Спасибо.
Короче я разобрался. Я допустил ошибку. Слово list написал с большой буквой List. Но сейчас все работает.
Самый нормальный способ: ++i++
for (const auto& i : myList)
cout
После 24:50 не понял....
Как бы..мы взяли первый элемент второго листа, и последный элемент первого, тоисть 19 и 99...
И оно должно было показывать 99 по 19 штук....не?
там перегруженная функция,
Тоже не вкурил прикола. Видимо, при передача в качестве аргумента итератор функция перегружена под это дело, как подсказали умные люди выше.
+
Разница в том что префикс ный инкремент выводит только следующие число а поствексный выводит следующее но и выводит прошлое число
Двусвязный список | Динамические структуры данных #2 - ссылка не работает
а почему у меня не работает auto? Версия С++ 17
А если второй раз revese ?
Норм
всем привет. может кто подскажет, если в list не реализован итератор свободного доступа, как мы перенаправляем наш итератор с помошью инкремента (it++), и почему тогда если мы можем перенаправить с помошью инкремента, то не работает запись (it+=1; или it=it+1), ведь по сути эти записи (it+=1; или it=it+1) равносильны записи (it++). ??
Потому что так
Я не докапываюсь, но просто написано 979, а вы читаете 572🤔😊😥
прошо обьесните что делать если ты скачал виртуал студио 2017 как ты рассказывал в видео и оно не грузится причом у меня 8 виндовс
спасибо за совет но можно совет по моей проблеме
поставь галочку std 8.1.0
большое спасибо за подсказку
почему нєзя отак:
auto o = a.end();
cout
потому что метод end() указывает как бы на несуществующий элемент, а как ты получишь доступ к тому, чего не существует.
кто смотрит видосы Simple code на скорости x3 ?
Привет из 2024. Х3 убрали, осталось только х2
@@Ordinary_man2049 Можно прописывать в консоли. Хоть х10 ставь)
Вы говорите что "мы изучили итераторы"
Но это только следующий урок.
Сами посмотрите на свой же плейлист
это какой-то баг в ютубе, ролик с итераторами вышел раньше
Спасибо за урок.
Спасибо!
спасибо
Я не докапываюсь, но просто написано 979, а вы читаете 572🤔😊😥
Спасибо за урок.
Спасибо!!!
спасибо
спасибо