我尝试实现C++ 14别名模板make_integer_sequence,这简化了类模板的创建integer_sequence.
template< class T, T... I> struct integer_sequence
{
typedef T value_type;
static constexpr size_t size() noexcept { return sizeof...(I) ; }
};
template< class T, T N>
using make_integer_sequence = integer_sequence< T, 0,1,2, ... ,N-1 >; // only for illustration.
Run Code Online (Sandbox Code Playgroud)
为了实现,make_integer_sequence我们需要一个辅助结构make_helper.
template< class T , class N >
using make_integer_sequence = typename make_helper<T,N>::type;
Run Code Online (Sandbox Code Playgroud)
实施make_helper并不太难.
template< class T, T N, T... I >
struct make_helper
{
typedef …Run Code Online (Sandbox Code Playgroud) 在阅读这篇关于c ++ 17最终特性的摘要时,我对结构化绑定(强调我的)部分感到有些惊讶:
结构化绑定
到目前为止,有一种已知的技巧滥用std :: tie直接将元组或对分配给不同的变量,而不必手动处理结果类型.这是一个hack,并且变量必须存在,现在你可以声明变量并在一行中初始化它们:
auto [a,b,c] = getvalues();
需要大括号,getvalues返回一个元组.提案中没有提到std :: pair,因此不清楚它是否适用于在某些插入方法中由STL返回的pair.
我假设他们提到了这种用法 std::tie
int a,b,c;
std::tie(a,b,c) = std::make_tuple(1,2,3);
Run Code Online (Sandbox Code Playgroud)
我认为这是一种推荐的做法.
有人可以解释为什么他们将上述例子称为黑客攻击吗?
std::minmax_element :返回一对由迭代器组成的对,作为第一个元素的最小元素和作为第二个元素的最大元素的迭代器.
std::min_element :将迭代器返回到[first,last]范围内的最小元素.
std::max_element :将迭代器返回到[first,last]范围内的最大元素.
是否std::minmax_element使用完整列表的排序来实现这一目标?
被处理的开销恢复对来自std::minmax_element足够值得?