@DimaIs

Какое обьявление массива в c++?

В разных источниках видел разные обьявления массива - где-то "int a[10]", где-то "vector a(10)". В чем разница, если она есть? И почему такие расхождения?
  • Вопрос задан
  • 263 просмотра
Решения вопроса 4
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Массив - это непрерывная область памяти (буфер) определенного типа.
С++ на уровне языка определяет для этого два средства: статические массивы (a[10]) и выделение блоков памяти, на которые можно ссылаться через указатель (int *a = new int[10];)

Но, в отличие от многих других языков, C++ не котролирует выход за границы массива, в результате чего можно сделать так:

int a[10];
a[333] = 5; // запись в ячейку памяти 
//по адресу 334 * sizeof(int) от начала массива.


Кроме того, для массивов, расположеных в куче (выделенных с помощью new) нельзя определить их реальные размеры (для статических массивов мы можем сделать sizeof(a)/sizeof(int)). Кроме того передавать многомерные массивы в функции, оперировать с динамическими массивами (изменяющими размер в процессе работы) и многие другие проблемы. Для их решения существует класс std::vector, который дарит нам абстракцию над массивом в хипе.

PS С С++11 появился еще std::array, который является абстракцией над статическим массивом.
Ответ написан
Комментировать
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Первое задает массив фиксированного размера, второе - динамического.

Первое работает быстро, так как массив создается на стеке. Второе работает медленнее, массив создается на куче.

В первом нельзя просто так побегать по массиву с удобным синтаксисом. Для этого есть замена std::array<int,10>
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Массив - это базовая структура, вектор - расширенная. Вектор эмулирует массив, давая прямой доступ к элементам, и, дополнительно, позволяет вставку/удаление элементов, поддерживает счётчик количества элементов.
Ответ написан
Комментировать
@abcd0x00
где-то "int a[10]", где-то "vector a(10)". В чем разница, если она есть?

В программировании есть статические и динамические структуры данных. В статических не может меняться количество элементов после создания. В динамических может меняться количество элементов после создания. И вот среди статических структур данных есть такая структура "вектор", а среди динамических структур данных есть динамическая структура "динамический вектор". В разных языках эти структуры могут быть как-то реализованы. В большинстве языков есть "вектор", который реализован в виде массива элементов. А в некоторых языках есть и динамический вектор, реализованный в виде себя самого.

Вот int a[10] - это реализация вектора в языке C++, а vector a(10) - это реализация динамического вектора в языке C++.

Также наряду с динамическим вектором в языке программирования могут быть реализованы и другие динамические структуры: стек, очередь, дек, множество, связный список и другие.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@huygens
разница между этими массивами в том, что первый массив - массив, а второй массив - не массив ни разу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы