Как C ++ 11 изменил стандартные контейнеры?

Я понял, что в C ++ 11 введена новая семантика перемещения, и, как следствие, контейнеры данных изменяются в соответствии с новыми определениями и спецификациями языка, я не совсем понимаю, какую выгоду от них получают стандартные контейнеры.

Также я думаю, что я понял, что такое Rvalue и как действует семантика перемещения, проблема в том, что я не вижу в этом смысла, перемещение объектов и изменение их меток не звучат как значимая особенность.

Я могу попросить хороший ресурс о том, как map, list, vector, ... меняются в новом C ++ 11?

-1

Решение

Причина, по которой были введены значения RValues ​​и LValues, заключается в том, что перемещение данных объекта может быть намного быстрее, чем копирование. Повышение производительности происходит в основном за счет внутренних указателей, которые не нужно реплицировать во время перемещения, что в противном случае потребовало бы ненужных вызовов malloc и memcpys. Например, std::string содержит указатель на char массив, который может быть очень большим. Копирование это будет включать в себя копирование данных в этом char перемещение массива просто включает в себя копирование указателя на эти данные.

Что касается LValues ​​и RValues, единственное, что, как я знаю, изменилось, — это то, что теперь у нас есть новый блестящий конструктор, и многие функции-члены были переписаны, чтобы использовать преимущества семантики перемещения.

Например, std::vector теперь имеет std::vector::vector(std::vector&& move) ctor, и функции как push_back были изменены, чтобы также принять RValues.

Это должно быть, по большей части, кажется вам безразличным. Если вы пишете библиотеку, а не просто используете ее, вы должны это знать, и URefs тоже.

3

Другие решения

Вы можете ознакомиться с описаниями контейнеров на cppreference, который объясняет интерфейс STL. Там вы можете найти то, что добавляет стандарт C ++ 11 — он помечен знаком ‘(since C++11)‘ тег. Если вы нажмете на тип контейнера, он покажет вам, какие методы являются новыми для него.

3

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector