堆栈容器适配器构造

stack container adaptor construction

来自 cppreference.

  1. 如何初始化 5-9 个构造函数?
  2. 成员模板构造函数的用途是什么template< class Alloc >

对于第一个问题,我尝试了各种方法,但我就是做不对。例如 std::stack<int> first; first.push(1); first.push(2); std::stack<int> second {first, std::allocator<int>()}; // error

对于第二个问题,我不明白成员模板构造函数的目的是什么template< class Alloc>。例如 vector 有一个构造函数 vector( const vector& other, const Allocator& alloc ); ,它清楚地表明第二个参数是一个分配器,它可以像下面这样简单地初始化 std::vector<int> first {1, 2, 3}; std::vector<int> second {first, std::allocator<int>()};

喜欢T.C。怀疑,看起来 libstdc++ 还没有实现那些构造函数。这是来自他们的 doxygen 的 source

128 #if __cplusplus < 201103L
129  explicit
130  stack(const _Sequence& __c = _Sequence())
131  : c(__c) { }
132 #else
133  explicit
134  stack(const _Sequence& __c)
135  : c(__c) { }
136 
137  explicit
138  stack(_Sequence&& __c = _Sequence())
139  : c(std::move(__c)) { }
140 #endif

另一方面,这是我的 Clang 的片段:

template <class _Alloc>
    _LIBCPP_INLINE_VISIBILITY
    stack(const container_type& __c, const _Alloc& __a,
          typename enable_if<uses_allocator<container_type,
                                            _Alloc>::value>::type* = 0)
        : c(__c, __a) {}
template <class _Alloc>
    _LIBCPP_INLINE_VISIBILITY
    stack(const stack& __s, const _Alloc& __a,
          typename enable_if<uses_allocator<container_type,
                                            _Alloc>::value>::type* = 0)