当前位置:主页 > c/c++教程 > C++ Array容器

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

发布:2023-03-05 14:00:02 59


给网友朋友们带来一篇相关的编程文章,网友郑燕肖根据主题投稿了本篇教程内容,涉及到C++、Array容器显示实例化、C++、Array容器隐式实例化、C++、Array容器、C++ Array容器相关内容,已被935网友关注,下面的电子资料对本篇知识点有更加详尽的解释。

C++ Array容器

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

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

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

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

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

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

//arraytp.hpp
#pragma once
template
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 
#include"arraytp.hpp"
int main()
{
    //定义一个长度为9的Array数组容器
    Array ia;
    //给ia赋值
    for (int  i = 0; i < 9; i++)
    {
        ia[i] = i;
    }
    //遍历ia
    ia.traverse();
    return 0;
}

运行结果:

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

显式实例化:

//arraytp.hpp
#pragma once
template
class Array
{
public:
	using size_type = size_t;
	void traverse();
	T& operator[](size_type i);
private:
	T arr[N];
};
//m1.cpp
#include
#include
#include "arraytp.hpp"
template
//遍历Array
void Array::traverse() 
{
	for (const auto& e : arr) {
		std::cout << e << ' ';
	}
	std::cout << '\n';
}
template
T& Array::operator[](size_type i) 
{
	return arr[i];
}
//在类模板中创建了三个显式类型
template class Array;
template class Array;
template class Array;
// ArryDisplay.cpp
#include 
#include"arraytp.hpp"
void assignment();
int main()
{
    assignment();
}
void assignment()
{
	//定义一个长度为9的Array数组容器
	Array 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++中构造函数与析构函数的调用顺序详解

    发布:2022-10-21

    为网友们分享了关于C++的教程,C++ 语言一直被批评太复杂了,很多细节的地方需要仔细推敲,甚至其构造函数和析构的调用顺序也成为了一个让人迷惑的问题,在此我做了简单的总结。这篇文章主要介绍了C++中构造函数与析构函数的调用顺序,需要的朋友可以参考借鉴。


  • C++中的函数返回值问题

    发布:2023-03-02

    这篇文章主要介绍了C++中的函数返回值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


  • c++11&14-多线程要点汇总

    发布:2022-04-08

    这篇文章主要介绍了c++11&14-多线程的使用方法,文中代码非常详细,方便大家更好的参考和学习,感兴趣的朋友快来了解下


  • C++实现图书管理系统简易版

    发布:2023-01-09

    给网友们整理关于C++的教程,这篇文章主要为大家详细介绍了C++实现图书管理系统简易版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • 如何理解C++ 临时变量的常量性

    发布:2022-04-02

    这篇文章主要介绍了如何理解C++ 临时变量的常量性,帮助大家更好的理解和学习c++ 变量,感兴趣的朋友可以了解下


  • C++ 格式化日志输出实现代码

    发布:2022-04-24

    这篇文章主要介绍了C++ 格式化日志输出实现代码,需要的朋友可以参考下


  • C++ Boost Any示例分析使用

    发布:2023-03-13

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称


  • C++小游戏教程之猜数游戏的实现

    发布:2023-03-11

    这篇文章主要和大家详细介绍如何利用C++做一个简易的猜数游戏,分为用户猜数和系统猜数。文中的示例代码讲解详细 ,感兴趣的小伙伴可以尝试一下


网友讨论