C++ Array容器的显示和隐式实例化详细介绍

 更新时间:2022年10月19日 09:32:23   作者:Peak@  
这篇文章主要介绍了C++中Array容器的隐式实例化和显式实例化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

提到Array容器的隐式实例化和显式实例化,不得不先说说Array的类模板。

类模板自己本身并不是一个类型和对象,模板必须进行实例化,实例化分为隐式和显式两种。

隐式实例化:在需要一个完整定义类型的代码中,如果该类型是通过某个模板来提供,就会发生模板的隐式实例化。

显式实例化:常用在模板的接口与实现分离的场合,显式实例化效率较高。

下面创建了Array的类模板和实例化:

1、Array的类模板和隐式实例化

//arraytp.hpp
#pragma once
template<typename T, size_t N>
class Array
{
public:
	using size_type = size_t;
	//遍历array
	void traverse() {
		for (const auto& e : arr) {
			std::cout << e << ' ';
		}
		std::cout << '\n';
	}
	T& operator[](size_type i) {
		return arr[i];
	}
private:
	T arr[N];
};
// Arrytest.cpp
#include <iostream>
#include"arraytp.hpp"
int main()
{
    //定义一个长度为9的Array数组容器
    Array<int, 9> ia;
    //给ia赋值
    for (int  i = 0; i < 9; i++)
    {
        ia[i] = i;
    }
    //遍历ia
    ia.traverse();
    return 0;
}

运行结果:

2、Array类模板的接口和实现

显式实例化:

//arraytp.hpp
#pragma once
template<typename T, size_t N>
class Array
{
public:
	using size_type = size_t;
	void traverse();
	T& operator[](size_type i);
private:
	T arr[N];
};
//m1.cpp
#include<iostream>
#include<string>
#include "arraytp.hpp"
template<typename T,size_t N>
//遍历Array
void Array<T, N>::traverse() 
{
	for (const auto& e : arr) {
		std::cout << e << ' ';
	}
	std::cout << '\n';
}
template<typename T,size_t N>
T& Array<T, N>::operator[](size_type i) 
{
	return arr[i];
}
//在类模板中创建了三个显式类型
template class Array<int, 9>;
template class Array<double, 9>;
template class Array<std::string, 9>;
// ArryDisplay.cpp
#include <iostream>
#include"arraytp.hpp"
void assignment();
int main()
{
    assignment();
}
void assignment()
{
	//定义一个长度为9的Array数组容器
	Array<double, 9> ia;
	//给ia赋值
	for (int i = 0; i < 9; i++) {
		ia[i] = i;
	}
	//遍历
	ia.traverse();
}

运行结果:

在显式实例化中是将模板的接口和实现分离了,同时在模板的实现中又三个显式类型,显式实例化还可以减少编译时间和对象大小。

.hpp文件是.h头文件和.cpp源文件的结合,.h文件放声明,.cpp文件放实现,而.hpp文件就是将声明和实现放在一起。

size_t是标准C库中定义的,它是一个基本的与机器相关的无符号整数的C/C++类型。

参考书籍:Accelerated C++和Cpp_Primer_5

到此这篇关于C++ Array容器的显示和隐式实例化详细介绍的文章就介绍到这了,更多相关C++ Array容器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言中的搜索算法详细解读

    C语言中的搜索算法详细解读

    这篇文章主要介绍了C语言中的搜索算法详细解读,如果用树构建一个搜索树,层层搜索关键字(的一个字母),搜索到后就是需要的描述,就会节约很多时间,需要的朋友可以参考下
    2023-10-10
  • VisualStudio2010安装教程

    VisualStudio2010安装教程

    这篇文章通过图文并茂的形式给大家介绍VisualStudio2010安装教程,在日常开发中是必不可少的搭建过程,感兴趣的朋友跟随小编一起看看吧
    2021-11-11
  • C语言中的const和free用法详解

    C语言中的const和free用法详解

    C语言中的const和C++中的const是有区别的,而且在使用VS编译测试的时候,如果是C的话,请一定要建立一个后缀为C的文件,不要是CPP的文件。因为,两个编译器会有差别的。下面通过本文给大家分享C语言中的const和free用法,感兴趣的朋友一起看看吧
    2017-04-04
  • C++实现图形界面双人五子棋游戏

    C++实现图形界面双人五子棋游戏

    这篇文章主要为大家详细介绍了C++实现图形界面双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • FFmpeg实现变速播放的两种方法总结

    FFmpeg实现变速播放的两种方法总结

    这篇文章主要为大家详细介绍了FFmpeg中实现变速播放的两种方法,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-07-07
  • C语言数据结构与算法之单链表

    C语言数据结构与算法之单链表

    单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。本文将为大家介绍C语言中单链表的基本概念与读取数据元素,需要的可以参考一下
    2021-12-12
  • C++如何获取本机的IP地址

    C++如何获取本机的IP地址

    这篇文章主要为大家详细介绍了C++如何获取本机IP地址小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C++实现数据文件存储与加载

    C++实现数据文件存储与加载

    这篇文章主要为大家详细介绍了C++实现数据文件存储与加载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • C语言设计三子棋小游戏

    C语言设计三子棋小游戏

    这篇文章主要为大家详细介绍了C语言设计三子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • C++虚函数表的原理与使用解析

    C++虚函数表的原理与使用解析

    对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。本文就将详细讲讲虚函数表的原理与使用,需要的可以参考一下
    2022-04-04

最新评论