Контейнер (програмування): відмінності між версіями

[перевірена версія][перевірена версія]
Вилучено вміст Додано вміст
Рядок 9:
Стандартні проблеми і помилки, які часто трапляються при використанні масивів<ref>[http://www.parashift.com/c++-faq-lite/arrays-are-evil.html C++ FAQ] [34.1] ''Why should I use container classes rather than simple arrays?''</ref>:
* При використанні індексованих масивів у мовах програмування системного рівня, такий як [[С]] чи [[C++]], не існує перевірки, якщо індекс виходить за рамки масиву. Це зауваження не стосується багатьох мов, які вважаються простішими і більш захищеними від помилок програміста, таких як [[Pascal]], [[Java]] тощо. Такі помилки важко відстежувати, адже в момент коли це трапляється ви можете отримати непередбачувану поведінку програми. Слід відмітити, що в деяких контейнерах, таких як ''std::vector'', немає перевірки виходу за межі масиву, в методах доступу до елементів вектору.
* У мовах, які не мають [[Збирання сміття|автоматичного прибирання сміття]], використання масивів часто потребує виділення пам'яті з купи, і в таких випадках програмісту необхідно власноруч подбати про те, щоб пам'ять виділена під масив була в кінці звільнена (враховуючи наявність всіх виключних ситуацій). Коли ви використовуєте контейнери, управління пам'яттю для вас відбувається автоматично.
* Ви не можете вставити елемент в середину масиву, або навіть додати один в кінець масиву, якщо ви не використовуєте динамічне виділення пам'яті для масиву, і навіть тоді вам доведеться виділяти пам'ять під новий масив і копіювати його елементи.
* Контейнери дозволяють вам звертатися до них за допомогою посилання чи за значенням, але масиви не дають вам такої можливості: до них завжди слід звертатися за посиланням. Якщо ви хочете зімітувати звернення до масиву за значенням, вам необхідно власноруч написати код, який явно копіює елементи масиву у коді, в тому числі знищувати ці копії, коли вони вже не потрібні. Все це відбувається автоматично, якщо ви використовуєте класи контейнерів.