C ++: Почему введена функция-член std :: vector :: data? - PullRequest
0 голосов
/ 13 февраля 2019

Я смотрел на векторный контейнер STL снизу по ссылке.Также упоминается, что одна из новых функций-членов, добавленных (с C ++ 11) к этому контейнеру, - vector::data, которая возвращает указатель на массив памяти, используемый внутри.

http://www.cplusplus.com/reference/vector/vector/data/

Пример кода, приведенный в приведенной выше ссылке, также показывает его использование, но казалось, что все, что можно сделать и с итераторами.

Есть ли какая-то конкретная причина для введения этой функции-члена?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Я думаю, что функция data() была введена для полноты интерфейса и удобства.

Таким образом, нам не нужно прибегать к уродству &vec[0] или &vec.front().

* 1007.Более того, получение указателя на базовые данные полезно во многих приложениях, например, для взаимодействия с кодом C или некоторыми внешними библиотеками, или во встроенных контекстах.
0 голосов
/ 13 февраля 2019

из комментариев:

  • std :: vector является ContiguousContainer и может быть доступен по указателям.
  • доступ по указателю может потребоваться C-подобные функции

Возможен сбой:

  • удаление указателя сделает недействительным vecotr и создаст проблемы при уничтожении вектора.

  • все, что приводит к перераспределению базовых данных в векторе (например, добавление элементов или сжатие), сделает указатель на висячий указатель.(Как указано в комментариях, это также верно для итераторов и ссылок)

...