Ну, студенти мого класу, здається, зовсім не в змозі пояснити мені, коли ефективніше використовувати вектори, але вони виглядають цілком щасливими, коли радять мені використовувати списки.
Це я так розумію
Списки : кожен елемент містить адресу наступного або попереднього елемента, тому за допомогою цієї функції ви можете рандомізувати елементи, навіть якщо вони не відсортовані, порядок не зміниться: це ефективно, якщо пам'ять буде фрагментована. Але це також має ще одну дуже велику перевагу: ви можете легко вставляти / видаляти елементи, адже єдине, що вам потрібно зробити, - це змінити деякі покажчики. Недолік: Щоб прочитати випадковий один елемент, вам потрібно перейти з одного елемента на інший, поки не знайдете правильну адресу.
Вектори : При використанні векторів пам'ять набагато більш організована, як звичайні масиви: кожен n-й елемент зберігається відразу після (n-1) -го елемента і до (n + 1) -го елемента. Чому це краще, ніж перелік? Тому що це дозволяє швидкий випадковий доступ. Ось як: якщо ви знаєте розмір елемента у векторі, і якщо вони є суміжними в пам'яті, ви можете легко передбачити, де знаходиться n-й елемент; вам не доведеться переглядати весь елемент списку, щоб прочитати той, який ви хочете, з вектором ви безпосередньо читаєте його зі списком, який ви не можете. З іншого боку, змінювати векторний масив або змінювати значення набагато повільніше.
Списки є більш доречними для відстеження об'єктів, які можна додати / вилучити в пам'яті. Вектори доцільніше, коли ви хочете отримати доступ до елемента з великої кількості одиниць.
Я не знаю, як списки оптимізовані, але ви повинні знати, що якщо ви хочете швидкого доступу до читання, ви повинні використовувати вектори, тому що, наскільки добре STL скріплює списки, він не буде таким швидким у доступі до читання, ніж вектор.