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