(三)可变参数模板、auto、范围for

这篇博客深入探讨了C++标准库的四大核心部分:容器(包括顺序容器和关联容器)、迭代器、算法以及仿函数。详细介绍了可变参数模板的使用,如如何实现递归打印功能。同时,讲解了`auto`关键字的正确使用场景,以及范围for循环在遍历容器时的简洁性。文章旨在帮助读者更好地理解和应用C++标准库。
摘要由CSDN通过智能技术生成

关于c++标准库

  • 分为四个部分:容器、迭代器、算法、仿函数
  • 容器
    • 顺序容器:数组、向量、双端队列、单向链表、双向链表
    • 容器适配器:栈、队列、优先队列
    • 关联容器:set、map、multiset、multimap
    • 无序关联容器:unordered_set、unordered_map、unordered_miltiset、unordered_multimap

可变参数模板

  • 允许写任意个数的模板参数,使用关键字typename…
  • 语法将参数分为两部分,一个和一包
  • 可以使用sizeof…(args),求包中参数的个数
void print()
{
}

//该模板参数接受两组参数,第一组只有一个名为T,第二组叫args参数数未知
template<typename T, typename... Types>
void print(const T& firstArg, const Types&... args)
{
	cout<<firstArg<<endl;
	print(args...);
}

print(7.5, "hello", bitset<16>(377), 42);//第一次调用时包有三个参数,递归调用直到最后只有零个参数,调用第一个print

auto

  • 由编译器推断元素类型,不必自己指定
  • 不要全部都使用auto
    • 第一点:在清楚变量类型时再使用auto
    • 第二点:编译器无法推断变量类型时不使用auto
  • auto传引用是auto&
  • 是一种语法糖
//原始示例
list<string> c;
...
list<string>::iterator ite;
ite = find(c.begin(), c.end(), target);

//使用auto
list<string> c;
auto ite = find(c.begin(), c.end(), target);

//错误用法
list<string> c;
...
auto ite;
ite = find(c.begin(), c.end(), target);

范围for

  • 语法
for( decl : coll){
	statement
}
//示例一
for(int i : {1, 2, 3, 4, 5}){
	cout<< i << endl;
}
//示例二
vector<double> vec;
...//给vec添加元素
for( auto elem : vec){
	cout << elem << endl;
}
//示例三
for( auto& elem : vec){
	elem *= 3;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值