Что ж, ученики моего класса, похоже, совершенно не в состоянии объяснить мне, когда более эффективно использовать векторы, но они выглядят весьма счастливыми, когда советуют мне использовать списки.
Вот как я понимаю
Списки :
Каждый элемент содержит адрес следующего или предыдущего элемента, поэтому с помощью этой функции вы можете рандомизировать элементы, даже если они не отсортированы, порядок не изменится: это эффективно, если ваша память фрагментирована.
Но у него есть и другое очень большое преимущество: вы можете легко вставлять / удалять элементы, потому что единственное, что вам нужно сделать, это изменить некоторые указатели.
Минус:
Чтобы прочитать случайный элемент, вам нужно переходить от одного элемента к другому, пока не найдете правильный адрес.
Vectors :
При использовании векторов память намного более организована, как обычные массивы: каждый n-й элемент сохраняется сразу после (n-1) -го элемента и до (n + 1) -го элемента.
Почему это лучше, чем список?
Потому что это позволяет быстрый произвольный доступ.
Вот как это делается: если вы знаете размер элемента в векторе, и если они непрерывны в памяти, вы можете легко предсказать, где находится n-й элемент; вам не нужно просматривать весь элемент списка, чтобы прочитать тот, который вы хотите, с вектором, вы непосредственно читаете его, со списком, который вы не можете.
С другой стороны, изменить векторный массив или изменить значение гораздо медленнее.
Списки больше подходят для отслеживания объектов, которые могут быть добавлены / удалены в памяти.
Векторы больше подходят, когда вы хотите получить доступ к элементу из большого количества отдельных элементов.
Я не знаю, как оптимизируются списки, но вы должны знать, что если вы хотите быстрого доступа к чтению, вы должны использовать векторы, потому что, насколько хорошо STL скрепляет списки, он не будет таким быстрым в доступе для чтения чем вектор.