IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++模板:容器list、vector -> 正文阅读

[C++知识库]c++模板:容器list、vector

模板是c++的特性,通过泛型实现。主要有两种表现形式:类型模板、和方法模板。

类型模板

实例化

  • 显示实例化,初始化告诉类型。
  • 隐示实例化,根据参数判别。

方法(函数)模板

参数化的一族函数(A family of function)
模板会被编译两次,第一次检查语法,第二次实例化期间检查调用是否合法。
模板实例化,如果需要不一样的类型,显示指定T的型别为长精度的类型,或者可以使用static_cast强制转换为不会丢失精度的类型,如:

Max<double>(1,2.0);
Max(static_cast<double>(1),2.0);

泛型编程

概述

  • to-be-specified-later
  • c++,Java,c#等OO language 都支持泛型编程思想
  • c++泛型思想是通过模板及相关特性表现的。

关联特性Traits

associate关联的型别,可以看做型别T的一种特性.

template <typename T>
inline typename SigmaTraits<T> :: ReturnType Sigma(const T const *start,const T const *end){

	typedef typename SigmaTraits<T> :: ReturnType ReturnType;
	ReturnType rs = ReturnType();
	while(start!=end){
		rs += *start++;
	}
	return rs;
}

迭代器iterator

迭代器是指泛化的指针。
STL中迭代器是容器与算法之间的接口,分离容器与算法,粘合容器与算法。

template <typename _itr, typename _ty>
inline _itr find(_itr start, _itr end, _ty _val){
	while(start!=end)
	{
		if(*start==_val){
			return start;
		}else{
			start++;
		}
	}
}

容器

c++ STL 容器主要有vector、list、set、map、deque、queue、stack,现主要介绍两种

动态数组vector

vector和array的区别在于,array的数量是固定的栈内存,而vector是可以动态操作的堆内存。

  • 添加元素 .push_back(T)
  • 访问元素v[0]效率高,不做越界处理,可能出现越界访问;.at(0)越界抛异常,效率低一些。
  • 删除元素.erase(it+1),删除尾部元素.pop_back(), 批量删除.erase(myint.begin(),myint.end()-1);

队列deque

和vector很像。双向队列,增加了从头部插入和删除的方法:push_front(T),pop_front(T)

链表list

双向的链表。list操作添加、删除都只是指针指向的内存地址的改变,不需要复制内存,非常迅速。但是查找和随机存储比较慢。

  • 添加元素push_front(T)、push_back(T)
  • 判断是否为空empty()或者变量size()
  • 删除元素,除了前删后删pop_back(T)、pop_front(T),还可以删除指定元素remove(T),删除指定位置的元素.erase(it+1)
  • 粘接list2.splice(list1.begin(),list2):讲list2粘接到list1的头部,同时情况list2;
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 10:59:30  更:2022-05-05 11:00:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 20:39:53-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码