使用 std::stack 而不仅仅是 deque、vector 或 list 有什么优点和缺点
What are the advantages and disadvantages of using std::stack instead of just deque, vector or list
我正在编写一个非常简单的std::stack,使用vector作为其底层容器。我意识到我可以将所有 push()、pop() 和 top() 函数替换为矢量容器的 push_back()、pop_back() 和 back()。
我的问题是:当底层容器的受控使用足够时,为什么要使用容器适配器?为什么不只使用双端、向量或列表?会浪费内存或处理时间吗?
当你的代码说std::stack
时,读者很清楚他们需要在容器上执行哪些操作......它进行通信和记录,同时强制不使用其他操作。 这可以帮助他们快速形成代码中算法逻辑的印象。 然后,很容易替换遵循相同接口的其他实现。
这有点像使用 std::ifstream
而不是 std::fstream
- 你可以用std::fstream
读写,但无论谁阅读你的代码,在意识到它仅用于读取之前,都需要考虑你把流放入的更多可能的用途;你会浪费他们的脑力劳动。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 当为可变性配置时,boost::heap::d_ary_heap 保留的额外 std::list 的目的是什么?
- 当通知迭代器参数初始化为空列表的开头时,list::insert 行为是什么?
- 这个语句到底是什么意思 stack<int, list<int> > 它与 stack 有何不同<int>?
- 什么时候应该在 std::list 上使用 std::vector?
- "friend std::ostream& operator<<(std::ostream& out, LinkedList& list)"是什么意思?
- 继承Java集合接口(Set、Map、List等)的C++等价物是什么?或者扩展AbstractCollection
- 使用 std::stack 而不仅仅是 deque、vector 或 list 有什么优点和缺点
- 从std::list中清除元素的顺序是什么
- std::list是一个循环列表!!等等,什么
- 'typename List::node_type& elem_node = elem->*list.node;'的语法含义是什么?
- "C2447: '{' : missing function header (old-style formal list?)"是什么意思?
- 插入失败时list/map返回什么?
- 模板参数的template-parameter-list是什么意思?
- 删除 std:list 中<User_Define>满足某些条件的元素的最佳方法是什么?
- 删除' std::list '的' end() '的行为是什么?
- "use of class template requires template argument list"是什么意思?
- 我需要链接什么库才能在 clang++ 中使用 std::list