2014-12-07 2 views
0

При объявлении массива строк, таких как std::array<std::string, 5> myArray = ..., как он хранится в памяти?Как массив строк хранится в C++?

В массиве элементы должны храниться последовательно в памяти, а также любой k-ый элемент должен быть доступен по индексу в постоянное время, поэтому как он работает с строками переменной длины?

ответ

2

Существует нормальный массив фиксированного размера string объектов (последовательно в памяти). Фактические данные каждой строки выделяются отдельно в другой ячейке памяти.

-2

я нашел следующий:

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

В целом знание макета памяти такой структуры не имеет значения, но сложность аксессуаров и модификаторов. Гарантируется, что доступ осуществляется в постоянное время. Я подозреваю, что за сценой у вас есть C-массив ...

+0

Не всегда важно, но это как раз точка вопроса – Xocoatzin

+0

Это не может быть так, потому что вы (в общем) не можете напрямую обращаться к структуре! –

0

Перегруженный operator [] доступен для std::array. Как и обычные массивы, std :: array хранит элемент последовательно. Таким образом, к-й элемент может быть доступен в течение постоянного времени.

+0

Будьте осторожны, сохранение элементов последовательно не гарантирует, что произвольный доступ находится в постоянное время: подумайте о связанном списке. –

+0

@ Jean-BaptisteYunès Ссылка не хранит элементы последовательно. –

+0

@pranitkothari Да, это так. В том смысле, что они находятся в четко определенной последовательности. – juanchopanza

0

std::string обычно реализуется как указатель на какое-то хранилище переменной длины. В этом нет никакой магии. Он может храниться в массиве, как любой другой фиксированный размер объект. Часть «размер переменной» - это косвенность, и массив не связан с ней.

Смежные вопросы