string s; cin >> s; stack<char, string> Left(s);
我知道第二个参数与容器有关,堆栈上的默认容器是双端队列。
string s; cin >> s; stack<char> Left(s);
但是我不明白为什么我不能把s直接放进去,如果我在第二个中清除字符串的话--毕竟,它们不都是连续内存空间中的char数组吗?
6ju8rftf1#
deduction guides可以在不提供 * 任何 * 模板参数的情况下工作。在这种情况下要使用的扣除指南是:
template< class Container > stack( Container ) -> stack<typename Container::value_type, Container>;
这意味着您只需删除char:
char
stack Left(s);
Left现在将是std::stack<char, std::string>,可以通过以下方式进行验证
Left
std::stack<char, std::string>
#include <type_traits> //... static_assert(std::is_same_v<stack<char, string>, decltype(Left)>);
1条答案
按热度按时间6ju8rftf1#
deduction guides可以在不提供 * 任何 * 模板参数的情况下工作。在这种情况下要使用的扣除指南是:
这意味着您只需删除
char
:Left
现在将是std::stack<char, std::string>
,可以通过以下方式进行验证