В чем основное отличие вектора и стека?

Оба действуют как стек. Оба имеют операции 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 не представляется возможным.