Common Algorithms in STL of C++(C++ STL中的常见算法函数)

Common Algorithms in STL of C++

今天刚刚上了课,疯了,居然快睡着了,不过,那么多的算法,还是蛮有用的,下面分享一下常用算法函数的用法和特点。写得不好的,欢迎指出。
首先,今天分享的函数都使用前都要加上下面的语句

#include <algorithm>
#include <numeric>
#include <iterator>  //  一般来讲,STL都应该
                     //  要用迭代器的头文件

algorithm头文件中

fill系和generate系

@Jannie Kung
//  从开始的迭代器到结束的迭代器指向的内容都赋上value
fill(iterator start, iterator finish, T value);
//  从开始的迭代器到start + number个迭代器指向的
//  内容都赋上value
fill(iterator start, int number, T value);
//  generate系和fill系函数的不同在于它的第三个参数
//  可以是函数,更加灵活
generate(iterator start, iterator finish, function);
//  从开始的迭代器到start + number个迭代器指向的内容通过
//  调用函数来实现
generate_n(iterator start, int number, function);

比较函数

@Jannie Kung
//  字典序比较返回类型bool,但不能完成排序等等的操作
lexicographical_compare(iterator first, iterator first + sizeOfFirstArray, iterator second, iterator second + sizeOfSecondArray);
//  比较两个container是否相等,返回类型bool
equal(iterator first_to_begin, iterator first_to_finish, iterator second);
//  若两个container不匹配,将返回第一个container不匹配的迭代器。
mismatch(iterator first_to_begin, iterator first_to_finish, iterator second);

remove系

@Jannie Kung
//  从开始的迭代器到结束迭代器把和value相等的值去掉,
//  返回新的iterator end,表明结束的迭代器不再
//  是原来的finish迭代器
remove(iterator start, iterator finish, T value);
//  和上面一个函数不同的是它是把结果重新
//  赋给一个新的container,返回类型为void
remove_copy(iterator start, iterator finish, iterator new_one_of_another_container, T value);
//  和上面两个函数不同的是它是通过函数进行筛选,
//  而不仅仅是value
remove_if(iterator start, iterator finish, function);
//  和上面函数不同的是它是通过函数进行筛选后把结果
//  放在新的container中
remove_copy_if(iterator start, iterator finish, iterator new_one_of_another_container, function);

replace系

@Jannie Kung
//  把start到finish迭代器中的elder_value中换成new_value
replace(iterator start, iterator finish, T elder_value, T new_value);
// 和上面函数不同的是它是在原有功能基础上把结果放到
//  一个新的container里面
replace_copy(iterator start, iterator finish, iterator new_start, T elder_value, T new_value); 
//  和replace系列第一个函数不同的是它把筛选同样地
//  通过调用函数完成
replace_if(iterator start, iterator finish, function, T new_value);
//  和上面函数不同的是它是把replace后的结果放到
//  新的container里面
replace_copy_if(iterator start, iterator finish, iterator new_start, function, T new_value);

algorithm和numeric头文件

mathematical algorithms

@Jannie Kung
//  任意打乱container中数据的顺序(目前还不清楚有什么作用)
random_shuffle(iterator start, iterator finish);
//  记下从start到finish的迭代器中value出现的次数,
//  返回类型int
count(iterator start, iterator finish, T value);
//  通过function而不是value筛选条件
count_if(iterator start, iterator finish, function);
// 返回从start到finish迭代器中的最大值
min_element(iterator start, iterator finish);
//  返回从start到finish迭代器中的最小值
max_element(iterator start, iterator finish);
//  值得注意的是,要保证使用max_element和min_element
//  函数的时候container不能为空,否则将会返回end(),
//  出现compile error.

//  通过对原container调用function,之后把结果
//  赋给新的container
transform(iterator start, iterator finish, iterator new_start, function);
//  类似for循环遍历从start到finish的迭代器,每一次
//  都调用function函数
for_each(iterator start, iterator finish, function);
//  累加从start到finish迭代器的数据,
//  sum代表初始化的和,可以人为设定为任意值,
//  而且,该函数定义在numeric而非algorithm头文件中
accumulate(iterator start, iterator finish, sum);

Basic Searching & Sorting Algorithms

@Jannie Kung
//  在start到finish的迭代器中寻找是否有与value相等的,
//  如果有,返回该值所在的迭代器,否则返回end()
find(iterator start, iterator finish, T value);
//  通过调用函数调用筛选的条件,如一个int类型的vector中,
//  函数可以实现greater than nine功能
find_if(iterator start, iterator finish, function);
//  sort函数不解释,而且可以加入第三个函数参数以函数为标准进行排序,
//  而且,sort这个傲娇的孩子只接受random_access iterator,
//  如vector一类,类似deque, list这一类的迭代器是不可行的
sort(iterator start, iterator finish);
//  二分查找value,查看是否在start到finish迭代器中
//  是否有等于该值的位置,若有,返回true;反之,返回false。
binary_search(iterator start, iterator finish, T value);

Swap

@Jannie Kung
//  简单swap不解释
swap(T & value, T & value1);
//  进行的是iterator的交换
iter_swap(T & value, T & value1);
//  start到middle的迭代器和middle到finish的迭代器进行交换
swap_ranges(iterator start, iterator middle, iterator finish);

其他各项函数

@Jannie Kung
//  把start到finish的迭代器复制到新的container里面,
//  而且是从后面开始插入
copy_backward(iterator start, iterator finish, iterator new_start);
//  把两个container融合到一个新的container里面
merge(iterator first_start, iterator first_finish, iterator second_start, iterator second_finish, iterator new_start);
//  把从start到finish的迭代器里面重复的内容删去,
//  返回新的end iterator
unique(iterator start, iterator finish);
//  把container倒序排放
reverse(iterator start, iterator finish);
//  first到middle的迭代器和middle到finish分别排序再组合,
//  再排序,可以用于排序,而且iterator不同于sort那般局限,
//  使用范围更广
inplace_merge(iterator first, iterator middle, iterator finish);

注意:转载请注明出处,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值