c++ 有关STL堆栈中内部容器的问题

5uzkadbs  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(103)
string s; cin >> s;
stack<char, string> Left(s);

我知道第二个参数与容器有关,堆栈上的默认容器是双端队列。

string s; cin >> s;
stack<char> Left(s);

但是我不明白为什么我不能把s直接放进去,如果我在第二个中清除字符串的话--毕竟,它们不都是连续内存空间中的char数组吗?

  • 上面的代码可以工作,下面的代码不行。
6ju8rftf

6ju8rftf1#

deduction guides可以在不提供 * 任何 * 模板参数的情况下工作。在这种情况下要使用的扣除指南是:

template< class Container >
stack( Container )
  -> stack<typename Container::value_type, Container>;

这意味着您只需删除char

stack Left(s);

Left现在将是std::stack<char, std::string>,可以通过以下方式进行验证

#include <type_traits>
//...
static_assert(std::is_same_v<stack<char, string>, decltype(Left)>);

相关问题