C++泛型编程学习(2)

17 篇文章 1 订阅

初识STL:

|| 什么是STL:Standard Template Library 标准模板库 ,目的就是为了提升复用性

|| STL广义上三大类分为容器,算法,迭代器。关系:容器和算法间通过迭代器进行无缝连接

|| STL细分为六大组件:容器,算法,迭代器,仿函数,适配器,空间配置器

容器:各种数据结构,用以存放数据vector, list, deque, set, map
算法:各种常用的算法,sort,find,copy, for_each
迭代器:算法通过迭代器访问容器中的数,每个容器都有自己专属的迭代器
仿函数:行为类似函数,可作为算法的协助
适配器:一种用来修饰容器/ 仿函数/ 迭代器接口的东西
空间配置器:负责空间的配置和管理

|| 容器:可分为序列式容器和关联式容器
序列式容器:强调值的序列
关联式容器:强调值的关系(树)

|| 算法:分为质变算法和非质变算法
质变算法:改变原区间的元素,拷贝/替换/删除
非质变算法:改变原区间的元素,查找,计数遍历

|| 迭代器:分为输入输出迭代器(只读只写 ±1),前向双向迭代器(读写 ±1),随机访问迭代器(读写 ±x)


vector相关 (数组) :

|| 创建语法:

#include<xvector>
//创建一个vector容器
vector<int> arr;

|| 容器的数据处理方式:push_back(), pop_back()

|| 遍历法一:使用迭代器iterator
//迭代器的个人理解(一家之言):可看作是一个指向容器元素的指针(专门用来做迭代)

for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
	cout << *it << endl;
}

|| 遍历法二:使用算法Algorithm库
for_each(头指针, 尾指针, 传入函数的函数名)
for_eac底层代码: 给函数传入的参数其实是指针的解引用!即容器元素本身

inline _Fn for_each(_InIt _First, _InIt _Last, _Fn _Func) { // perform function for each element
    _Adl_verify_range(_First, _Last);
    auto _UFirst      = _Get_unwrapped(_First);
    const auto _ULast = _Get_unwrapped(_Last);
    for (; _UFirst != _ULast; ++_UFirst) {
        _Func(*_UFirst);
    }

    return _Func;
}
void myPrint(int val)   {cout << val << " ";}
for_each(v.begin(),v.end(), myPrint);

二维数组:
创建语法

vector<voctor<int>> bArr;

vector<int> sArr1;
vector<int> sArr2;
vector<int> sArr3;
for(int i = 0; i < 4; i++)
{
	sArr1.push_back(i);
	sArr2.push_back(i);
	sArr3.push_back(i);
}

bArr.push_back(sArr1);
bArr.push_back(sArr2);
bArr.push_back(sArr3);

遍历法一:使用迭代器iterator

for (vector<vector<int>>::iterator it = bArr.begin(); it != bArr.end(); it++)
	{
		cout << endl;
		//现在 *it 就是子数组本身
		for (vector<int>::iterator sit = (*it).begin(); sit != (*it).end(); sit++)
			cout << *sit << " ";
	}

遍历法二:使用算法Algorithm库

void myPrint(vector<int> val) {  //val == 小容器
	for (vector<int>::iterator sit = val.begin(); sit != val.end(); sit++)
		cout << *sit << " ";
}

for_each(bArr.begin(), bArr.end(), myPrint);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值