В чем основное отличие вектора и стека?
Оба действуют как стек. Оба имеют операции push и pop.
Является ли разница в некоторых макетах памяти?
Ответы
Ответ 1
std::vector
имеет несколько операций доступности и модификации по сравнению с std::stack
. В случае std::stack
вам может потребоваться выполнять операции только систематически, где вы можете push()
над последним элементом или pop()
последним элементом.
std::vector
более гибкий в этом смысле, где он имеет несколько операций, где вы можете insert()
между ними или erase()
между ними.
Главное, что std:: stack должен быть предоставлен базовый контейнер. По умолчанию это std::deque
, но это может быть std::vector
или std::list
тоже.
С другой стороны, std::vector
гарантированно будет непрерывным массивом, доступ к которому можно получить с помощью operator []
.
Ответ 2
Я не знаю всех деталей реализации, но в соответствии с этим стек представляет собой контейнерный адаптер. Он гарантирует, что базовый контейнер, который может быть вектором, списком или deque, работает как стек, т.е. Разрешает только push и pop, а не произвольный доступ.
Итак, вектор может работать как стек, но стек не может работать как вектор, потому что вы не можете вставить или получить элемент в произвольной позиции.
Ответ 3
stack
- это стек. Это может только толчок и поп. A vector
может делать другие вещи, такие как вставка в середину. Это повышает гибкость, но снижает гарантии.
Например, для стека, если вы нажмете A, а B на спину, то вам гарантировано, что они будут удалены в порядке B, тогда A. vector
не гарантирует этого.
Ответ 4
Стек - это в основном частный случай вектора. Теоретически говоря вектор может расти, как вы пожелаете. Вы можете удалить элементы по любому индексу в векторе. Однако в случае стека вы можете удалить элементы и вставить их только в верхнюю часть (следовательно, специальный случай вектора).
Во многих библиотеках, которые обеспечивают реализацию стека, они обычно наследуются от векторного класса/структур. Я не уверен, но я думаю, что STL (С++) делает это.
Ответ 5
Я думаю, что основное отличие состоит в том, что вектор представляет собой контейнер на основе диапазона. Его можно легко использовать благодаря своим функциям-членам, таким как начало и конец. Вектор может быть легко инициирован с помощью формы {}. Мы можем использовать новые возможности современных С++, таких как диапазонные циклы.
vector<int> vec{ 7, 3, 1, 9, 5 };
for ( auto &i : vec ) {
std::cout << i << std::endl;
}
В то время как std:: stack не представляется возможным.