STL基础

本文介绍了STL(StandardTemplateLibrary)的基础架构,包括容器、分配器、算法、迭代器、适配器和仿函数的概念,并通过C++代码示例展示了它们在实际编程中的应用,如使用vector和迭代器遍历容器,以及OOP和GP(泛型编程)的区别。

STL体系结构基础介绍:         

六大部件关系图:

容器,分配器,算法,迭代器,适配器,仿函数。

#include<vector>
#include<algorithm>
#include<functional>
#include<iostream>
using namespace std;
//返回大于等于40的个数
int main()
{
	int ia[6] = {27,210,12,47,109,83};//数组名就是指针常量
	vector<int, allocator<int>> vi(ia, ia + 6);//引用ia中的数据
	//  vector 容器,容器背后有分配器支持分配内存,可以不写(默认值),每次分配的内存是int
	cout << count_if ( vi.begin(), vi.end(), not1(bind2nd(less<int>(), 40)));
	// 算法count_if,符合条件的元素个数;vi.begin(),vi.end()迭代器;
	// less() 仿函数,bind2nd()绑定第二参数,所以not1()中的意思就是,小于40。
	// not1() 大于等于40,not1()和bind2nd仿函数适配器
	return 0;
}

上述代码用到了六大部件 

迭代器:

前闭后开区间

可以取到*(c.begin()),但是*(c.end()),不一定取的到。

遍历容器:

#include<vector>
#include<iostream>
using namespace std;
int main()
{
	vector<int> c;
	c = { 1,2,3,5,7,8 };//集合体,容器
	//vector<int>::iterator ite = c.begin();
	auto ite = c.begin();
	for (; ite != c.end(); ++ite)
	{
		cout << *ite << endl;
	}
	return 0;
}

使用auto

int main()
{
	vector<int> c;
	c = { 1,2,3,5,6,7,9,3 };
	for (auto elem : c)
	{
		cout << elem << endl;
	}
	return 0;
}

 OOP(面向对象编程) vs GP(泛型编程)

OOP:数据和操作放在一起,class中

GP:将数据和操作分离开来,操作就是定义的函数。

### STL(标准模板库)基础知识介绍 #### 什么是STL STL (Standard Template Library - 标准模板库),是C++标准库的关键部分,不仅提供了大量可复用的组件,还构建了一个包含多种数据结构和算法的软件框架[^1]。 #### 主要组成部分 STL主要由四个核心概念组成: - **容器(Container)** 容器用于存储不同类型的对象集合。常见的容器包括`vector`, `list`, `deque`, `set`, `map`等。每种容器都有各自的特点和适用场景。例如,`list`是一种双向链表,在任意位置插入或删除元素的时间复杂度为O(1)[^5]。 - **迭代器(Iterator)** 迭代器用来遍历容器中的元素。它们类似于指针,可以指向容器内的某个特定位置,并允许顺序访问相邻的数据项。通过迭代器操作,程序员能够以统一的方式处理各种不同的容器类型。 - **算法(Algorithm)** 提供了一系列通用的操作函数,如排序(`sort`)、查找(`find`)、复制(`copy`)等。这些算法被设计成独立于具体容器实现的形式,因此具有高度灵活性和广泛的适应性。对于自定义数据结构也可以轻松应用相应的算法逻辑[^4]。 - **仿函数(Function Object 或 Functor)** 类似于普通函数的对象实例化形式,通常用于定制某些行为模式下的比较规则或是其他运算方式。比如在使用`std::sort()`时可以通过传递一个仿函数来自定义排序依据。 ```cpp // 自定义仿函数示例 struct CompareById { bool operator()(const TDeviceInfo& lhs, const TDeviceInfo& rhs) { return strcmp(lhs.achDeviceId, rhs.achDeviceId) < 0; } }; ``` #### 使用优势 采用STL带来的益处显而易见: - 减少重复造轮子的工作量; - 利用了经过严格验证的标准库代码,提高了系统的稳定性和安全性; - 可以依赖专家级开发者优化后的高效能实现方案; - 推动了良好编码习惯的发展,促进了团队协作交流[^3]。 #### 实际应用场景举例 当涉及到UI界面展示有序列表的情况时,往往需要先对后台维护的数据集按照一定条件完成预处理工作——即排序过程。此时就可以借助STL所提供的强大工具箱来简化任务难度并提升性能表现。假设有一个保存着多个设备基本信息记录的数组,则可以直接调用内置方法对其进行快速排列组合。 ```cpp #include <algorithm> #include <string.h> bool compareByName(const TDeviceInfo &a, const TDeviceInfo &b){ return strcmp(a.achDeviceName,b.achDeviceName)<0; } int main(){ std::vector<TDeviceInfo> devices = /*...*/; // 对devices按名字升序排序 std::sort(devices.begin(), devices.end(), compareByName); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值