Chả là nay em tìm hiểu về DFS BFS thì có đọc về Stack. Nhưng em chả thấy nó có sự khác biệt gì với Vector cả. Ví dụ hàm push
trong Stack thì vector có push_back
với độ phức tạp là O(1), tương tự hàm pop
trong Stack và pop_back
trong Vector, hàm top
trong Stack và vector[vector.size()-1]
(hoặc vector.back()
) trong Vector với tất cả có độ phức tạp như nhau.
Vậy cho em hỏi lý do gì người ta lại dùng Stack trong khi ta lại có Vector - một loại container theo em thấy là tương đương và nhiều chức năng hơn vậy ạ?
Sự khác nhau của Stack và Vector trong C++?
cú pháp trong sáng hơn
stack
là wrapper của 1 container bất kì, miễn là container đó thỏa mãn SequenceContainer và có thêm 3 hàm back()
, push_back()
, pop_back()
. Nếu muốn mình có thể viết 1 class thỏa mãn các yêu cầu trên rồi gọi std::stack<int, MyIntContainer>
là được. Mặc định C++ xài deque
làm container cho stack
, ngoài ra còn có thể xài vector
hoặc list
.
xài vector
thế stack
cũng được, nhưng ai cấm dev nó truy cập v[i]
thay vì chỉ truy cập được phần tử ở top của stack, hay pop vị trí bậy bạ khác pop top
^^ em cảm ơn bác nhiều, vậy thôi cứ xài stack cho nó giống người khác z haha
Mở rộng hơn chút xíu, thì có một nguyên tắc bất ngờ nhỏ nhất như vầy: https://en.wikipedia.org/wiki/Principle_of_least_astonishment
TL;DR: nếu bạn dùng std::stack
, người khác nhìn vào sẽ biết ngay là Stack
. Nếu bạn dùng std::vector
như std::stack
, người khác phải mất thời gian để đọc, hiểu mới biết. Chưa kể phải tốn thời gian để kiểm chứng bạn dùng đúng như stack, và không dùng các tính năng khác như @tntxtnt đã nói.
dạ em cảm ơn bác nhiều nha ^^