加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

检测c数组中的数据类型

发布时间:2020-12-16 10:13:35 所属栏目:百科 来源:网络整理
导读:这是打印出buf数组的c代码,填充0,1,2,… 254 #include iterator#include iostream#include numericint 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,std::ostream_iteratordeclt
这是打印出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,std::ostream_iterator<decltype(*it_b)>(std::cout," "));

        std::cout << std::endl;

        return 0;
}

我试图让它变得通用,所以只有一个地方的类型是明确的给定int

由于我需要明确声明ostream_iterator的类型,我想知道实现这个目标的最佳方法是什么.

> decltype(* it_b)
> decltype(buf [0])
>其他的……

使用这种或那种方法的优点/缺点是什么?

在这个时候假设我们坚持使用C风格的数组.

解决方法

要严格正确,您应该使用 std::iterator_traits

std::copy(it_b,std::ostream_iterator<
    typename std::iterator_traits<decltype(it_b)>::value_type
>(std::cout," "));

单独使用decltype(* it_b)的一个问题是它在大多数情况下会返回一个引用,这会使你要实例化的外部模板混乱.您也可以手动删除引用:

std::copy(it_b,std::ostream_iterator<
    std::remove_reference_t<decltype(*it_b)>
>(std::cout," "));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读