C++标准模板(STL)- 类型支持 (类型修改,从给定数组类型移除一个维度,std::remove_extent)

类型特性


类型特性定义一个编译时基于模板的结构,以查询或修改类型的属性。

试图特化定义于 <type_traits> 头文件的模板导致未定义行为,除了 std::common_type 可依照其所描述特化。

定义于<type_traits>头文件的模板可以用不完整类型实例化,除非另外有指定,尽管通常禁止以不完整类型实例化标准库模板。
 

类型修改

类型修改模板通过应用修改到模板参数,创建新类型定义。结果类型可以通过成员 typedef type 访问。
 

从给定数组类型移除一个维度

std::remove_extent

template< class T >
struct remove_extent;

(C++11 起)

T 是某类型 X 的数组,则提供等于 X 的成员 typedef type ,否则 typeT 。注意若 T 是多维数组,则只移除第一维。

成员类型

类型定义
typeT 的元素类型

辅助类型

template< class T >
using remove_extent_t = typename remove_extent<T>::type;

(C++14 起)

可能的实现

template<class T>
struct remove_extent { typedef T type; };template<class T>
struct remove_extent<T[]> { typedef T type; };template<class T, std::size_t N>
struct remove_extent<T[N]> { typedef T type; };

调用示例

#include <iostream>
#include <iterator>
#include <algorithm>
#include <type_traits>//std::rank(C++11)获取数组类型的维数
//std::extent(C++11)获取数组类型在指定维度的大小template<class A>
typename std::enable_if< std::rank<A>::value == 1 >::type
print_1d(const A& a)
{std::copy(a, a + std::extent<A>::value,std::ostream_iterator<typename std::remove_extent<A>::type>(std::cout, " "));std::cout << std::endl;
}int main()
{int a[][5] = {{1, 2, 3, 7, 8}, {4, 5, 6, 9, 0}};//  print_1d(a); // 编译时错误print_1d(a[0]);print_1d(a[1]);std::cout << std::endl;char str[][5] = {{'a', 'b', 'c', 'd', 'f'}, {'h', 'i', 'j', 'k', 'l'}};print_1d(str[0]);print_1d(str[1]);std::cout << std::endl;return 0;
}

输出

1 2 3 7 8
4 5 6 9 0a b c d f
h i j k l

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/183653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某60物联网安全之IoT漏洞利用实操2学习记录

物联网安全 文章目录 物联网安全IoT漏洞利用实操2&#xff08;内存破坏漏洞&#xff09;实验目的实验环境实验工具实验原理实验内容实验步骤ARM ROP构造与调试MIPS栈溢出漏洞逆向分析 IoT漏洞利用实操2&#xff08;内存破坏漏洞&#xff09; 实验目的 学会ARM栈溢出漏洞的原理…

二.运算符

运算符 1.算术运算符2.比较运算符3.逻辑运算符 1.算术运算符 算数运算符主要用于数学运算&#xff0c;其可以连接运算符前后的两个数值或表达式&#xff0c;对数值或表达式进行 - * / 和 取模%运算 1.加减法运算符 mysql> SELECT 100,100 0,100 - 0,100 50,100 50 - …

输入通道数 和 输出通道数 的理解

输入通道数&#xff08;in_channels&#xff09;输出通道数&#xff08;out_channels&#xff09; 在卷积神经网络中通常需要输入 in_channels 和 out_channels &#xff0c;即输入通道数和输出通道数&#xff0c;它们代表什么意思呢&#xff1f; 输入通道数&#xff08;in_c…

nexus

一、nexus介绍二、nexus部署部署java环境安装配置nexus浏览器访问 三、创建一个内网yum源四、创建一个代理yum仓库五、jenkins 使用 nexus插件jenkins部署maven-proxy配置 maven 工程查看构建和上传 一、nexus介绍 Nexus 是一个强大的仓库管理工具&#xff0c;用于管理和分发 …

linux用户组管理_创建删除密码修改

2.2 用户/组管理 2.2.1 用户 2.2.1.1 useradd&#xff1a;创建用户 添加用户账号就是在系统中创建一个新账号&#xff0c;然后为新账号分配用户号、用户组、主目录和登录Shell等资源。 useradd命令的基本语法如下&#xff1a; useradd 选项 用户名 常见选项参数&#xff…

瑞云科技参与《数字孪生世界白皮书》编写,实时云渲染助力数字孪生

为了促进数字孪生技术的发展和应用&#xff0c;易知微与数字孪生世界企业联盟联合众多行业专家以及多家业内企业共同编写了《数字孪生世界白皮书&#xff08;2023&#xff09;》。该白皮书从数字孪生的综述、应用架构、核心技术、新型技术成果和重点行业应用等方面&#xff0c;…

笙默考试管理系统-MyExamTest----codemirror(43)

笙默考试管理系统-MyExamTest----codemirror&#xff08;43&#xff09; 目录 一、 笙默考试管理系统-MyExamTest----codemirror 二、 笙默考试管理系统-MyExamTest----codemirror 三、 笙默考试管理系统-MyExamTest----codemirror 四、 笙默考试管理系统-MyExamTest---…

【算法刷题】Day9

文章目录 611. 有效三角形的个数![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/9d627e680e9144a2b67474a1d80aa030.png)题解&#xff1a;代码&#xff1a; LCR 179. 查找总价格为目标值的两个商品题解&#xff1a;代码&#xff1a; 611. 有效三角形的个数 原题链…

MATLAB算法实战应用案例精讲-【图像处理】图像分割(基础篇)

目录 前言 算法原理 什么是图像分割? 语义分割 vs. 实例分割 传统的图像分割方法

端口隔离度

端口隔离度 隔离度为&#xff08;本振或射频信号&#xff09;泄漏到其他端口的功率与输入功率之比&#xff0c;单位是dB。 比如 RF to LO Isolation 表示 射频输入信号的功率 与 泄漏到LO端口的功率 之比。 而 LO to RF Isolation 则表示 本振输入信号的功率 与 泄漏到RF端口的…

typescript使用笔记

typescript已经成为前端日常开发中常用的工具之一&#xff0c;本文结合自己的使用做一下笔记&#xff0c;方便以后查阅。 Partial Partial可以将某个类型中定义的属性变成可选的. 下面的定义了Book类型&#xff0c;创建实力时如果不设置id属性就会提示错误。 type Book {id…

Ubuntu部署jmeter与ant

为了整合接口自动化的持续集成工具&#xff0c;我将jmeter与ant都部署在了Jenkins容器中&#xff0c;并配置了build.xml 一、ubuntu部署jdk 1&#xff1a;先下载jdk-8u74-linux-x64.tar.gz&#xff0c;上传到服务器&#xff0c;这里上传文件用到了ubuntu 下的 lrzsz。 ubunt…

Spring-AOP与声明式事务

为什么要用AOP ①现有代码缺陷 针对带日志功能的实现类&#xff0c;我们发现有如下缺陷&#xff1a; 对核心业务功能有干扰&#xff0c;导致程序员在开发核心业务功能时分散了精力 附加功能分散在各个业务功能方法中&#xff0c;不利于统一维护 ②解决思路 解决这两个问题&…

TOUGH系列软件解读

TOUGH系列软件是由美国劳伦斯伯克利实验室开发的&#xff0c;旨在解决非饱和带中地下水、热运移的通用模拟软件。和传统地下水模拟软件Feflow和Modflow不同&#xff0c;TOUGH系列软件采用模块化设计和有限积分差网格剖分方法&#xff0c;通过配合不同状态方程&#xff08;EOS模…

关于css的一些知识

position&#xff1a; 在 CSS 中&#xff0c;position 属性用于定义元素的定位方式。它有几个取值&#xff1a; static: 默认值。元素按照正常文档流进行定位&#xff0c;不会被特殊地定位。relative: 相对定位。元素相对于它正常位置进行定位&#xff0c;但是在文档流中仍保…

同旺科技 分布式数字温度传感器

内附链接 1、数字温度传感器 主要特性有&#xff1a; ● 支持PT100 / PT1000 两种铂电阻&#xff1b; ● 支持 2线 / 3线 / 4线 制接线方式&#xff1b; ● 支持5V&#xff5e;17V DC电源供电&#xff1b; ● 支持电源反接保护&#xff1b; ● 支持通讯波特率1200bps、2…

使用Java对yaml和properties互转,保证顺序、实测无BUG版本

使用Java对yaml和properties互转 一、 前言1.1 顺序错乱的原因1.2 遗漏子节点的原因 二、优化措施三、源码 一、 前言 浏览了一圈网上的版本&#xff0c;大多存在以下问题&#xff1a; 转换后顺序错乱遗漏子节点 基于此进行了优化&#xff0c;如果只是想直接转换&#xff0c…

1.3 排序算法

1.1 冒泡排序 public class BubbleSort {public static void main(String[] args) {int[] arr {133,322,13,444,54,621,174,18,19,2};System.out.println(Arrays.toString(arr));BubSort(arr);System.out.println(Arrays.toString(arr));}//冒泡排序public static void BubSo…

21.Oracle的程序包(Package)

Oracle的程序包Package 一、Package的概述1、什么是Oracle11g的Package2、Package的作用是什么3、常见的系统内置Package 二、创建Package的相关语法1、Package的创建语法2、Package的删除3、具体案例4、Package的使用5、与Package相关的其他语法 三、常见内置程序包的使用1、…

ElasticSearch之Search settings

相关参数 indices.query.bool.max_clause_count 本参数当前已失效。 search.max_buckets 本参数用于控制在单个响应中返回的聚合的桶的数量。 默认值为65536。 本参数允许在elasticsearch.yml中配置&#xff0c;配置样例如下&#xff1a; search.max_buckets: 30或者使用Ela…