c++模板:容器list、vector

本文深入探讨了C++中的模板,包括类型模板和方法(函数)模板,以及泛型编程的概念。重点讲解了STL中的动态数组vector和链表list。vector提供高效访问,但插入和删除可能涉及越界风险,而list在添加和删除操作上速度快,但在查找和随机访问上较慢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板是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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

群野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值