woo*_*hek 3 c++ arrays c++11 c++14
这是打印出buf数组的c ++代码,填充0,1,2,... 254
#include <iterator>
#include <iostream>
#include <numeric>
int main()
{
int buf[255];
auto it_b = std::begin(buf);
auto it_e = std::end(buf);
std::iota(it_b, it_e, 0);
std::copy(it_b, it_e, std::ostream_iterator<decltype(*it_b)>(std::cout, " "));
std::cout << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我试图使它成为通用的,所以只有一个地方的类型是明确的给定 int
因为我需要明确声明类型,ostream_iterator我想知道实现这一目标的最佳方法是什么.
decltype(*it_b)decltype(buf[0])使用这种或那种方法的优点/缺点是什么?
在这个时候假设我们坚持使用C风格的数组.
要严格正确,您应该使用std::iterator_traits:
std::copy(it_b, it_e, std::ostream_iterator<
typename std::iterator_traits<decltype(it_b)>::value_type
>(std::cout, " "));
Run Code Online (Sandbox Code Playgroud)
decltype(*it_b)单独存在的一个问题是,在大多数情况下它会返回一个引用,这会混淆您实例化的外部模板.您也可以手动删除引用:
std::copy(it_b, it_e, std::ostream_iterator<
std::remove_reference_t<decltype(*it_b)>
>(std::cout, " "));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |