STL算法

STL 提供能在各种容器中通用的算法,如插入、删除、查找、排序等。算法就是函数模板。算法通过迭代器来操纵容器中的元素。

许多算法操作的是容器上的一个区间(也可以是整个容器),因此需要两个参数,一个是区间起点元素的迭代器,另一个是区间终点元素的后面一个元素的迭代器。

有的算法返回一个迭代器。例如,find 算法在容器中查找一个元素,并返回一个指向该元素的迭代器。

算法可以处理容器,也可以处理普通的数组。

有的算法会改变其所作用的容器。例如:

	copy:将一个容器的内容复制到另一个容器。remove:在容器中删除一个元素。random_shuffle:随机打乱容器中的元素。fill:用某个值填充容器。

有的算法不会改变其所作用的容器。例如:

	find:在容器中查找元素。count_if:统计容器中符合某种条件的元素的个数。

STL 中的大部分常用算法都在头文件 algorithm 中定义。此外,头文件 numeric 中也有一些算法。

find 算法和其他算法一样都是函数模板。find 模板的原型如下:

template <class InIt, class T>
InIt find(InIt first, InIt last, const T& val);

其功能可以是在迭代器 first、last 指定的容器的一个区间 [first, last) 中,按顺序查找和 val 相等的元素。如果找到,就返回该元素的迭代器;如果找不到,就返回 last。

	[first, last) 这个区间是一个左闭右开的区间,即 last 指向的元素其实不在此区间内。

按照语法,调用 find 模板时,first 和 last 只要类型相同就可以,不一定必须是迭代器。

演示 find 用法的程序如下:

#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int main()  {int a[10] = {10,20,30,40};vector<int> v;v.push_back(1);    v.push_back(2);v.push_back(3);    v.push_back(4); //此后v里放着4个元素:1,2,3,4vector<int>::iterator p;p = find(v.begin(),v.end(),3); //在v中查找3if(p != v.end()) //若找不到,find返回 v.end()cout << "1) " <<  * p << endl; //找到了p = find(v.begin(),v.end(),9);if(p == v.end())cout << "not found " << endl; //没找到p = find(v.begin()+1,v.end()-1,4); //在,3 这两个元素中查找4cout << "2) " << * p << endl;int * pp = find(a,a+4,20);if(pp == a + 4)cout << "not found" << endl;elsecout << "3) " <<* pp << endl;
}

程序的输出结果是:

3
not found4
20

第 11 行,要查找的区间是 [v.begin(), v.end( )),v.end() 不在查找范围内,因此没有问题。本行的查找会成功,因此 p 指向找到的元素 3。

第 17 行,因为要查找的区间是 [v.begin()+l,v.end()-1),这个区间中只有 2、3 这两个元素,因此查找会失败,p 的值变为 v.end() - 1,因此 p 正好指向 4 这个元素。

第 19 行,数组 a 是一个容器。数组名 a 的类型是 int ,可以做迭代器使用,表达式a+4的类型也是 int,因此也能做迭代器。本次调用 find,查找区间是 [a, a+4),即数组 a 的前 4 个元素。如果查找失败,find 就会返回 a+4。

STL 中还有一个常用的算法 sort,用于对容器排序,其原型为:

template<class_RandIt>
void sort(_RandIt first, _RandIt last);

该算法可以用来对区间 [first, last) 从小到大进行排序。下面对数组 a 排序:

int a[4] = {3, 4, 2, 1};
sort(a, a+4);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564190.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle导出pck文件,Oracle sqlloader自动化导入迁移工具—可批量生成千万控制文件与批处理文件|一键执行(推荐)...

应用介绍一、设计概述与背景&#xff1a;在目前SQL Server数据库和Oracle数据库之间进行数据迁移工作&#xff0c;可以使用多种方案&#xff0c;其中采用文本文件作为数据交换的中间介质&#xff0c;具有如下特点&#xff1a;1、各个主流数据库都支持文本文件的导入、导出功能。…

STL中“大”、“小”和“相等”的概念

STL 中关联容器内部的元素是排序的。STL 中的许多算法也涉及排序、查找。这些容器和算法都需要对元素进行比较&#xff0c;有的比较是否相等&#xff0c;有的比较元素大小。 在 STL 中&#xff0c;默认情况下&#xff0c;比较大小是通过<运算符进行的&#xff0c;和>运算…

oracle 分割字符成数组,oracle依据分隔符将字符串分割成数组函数

oracle根据分隔符将字符串分割成数组函数--创建表类型create or replace type mytype as table of number;--如果定义成varchar--CREATE OR REPLACE type mytype as table of varchar2(4000);-- 将字符串分割成数组function my_split(piv_str in varchar2, piv_delimiter in va…

C++ vector,STL vector

vector 是顺序容器的一种。vector 是可变长的动态数组&#xff0c;支持随机访问迭代器&#xff0c;所有 STL 算法都能对 vector 进行操作。要使用 vector&#xff0c;需要包含头文件 vector。 在 vector 容器中&#xff0c;根据下标随机访问某个元素的时间是常数&#xff0c;在…

sql查询oracle数据,sql-server – 从SQL Server查询Oracle数据库

我有一个Oracle 11g XE数据库,我想将其转移到SQL Server Express 2005中.起初我以为我只是在Oracle中生成表作为SQL,操纵数据格式,并在SQL Server中运行查询.这适用于小型表,但我有几个表有几十万行,有些表有数百万行,所以这个解决方案不起作用.然后我创建了一个包含以下内容的…

C++ list,STL list

list 是顺序容器的一种。list 是一个双向链表。使用 list 需要包含头文件 list。双向链表的每个元素中都有一个指针指向后一个元素&#xff0c;也有一个指针指向前一个元素。 在 list 容器中&#xff0c;在已经定位到要增删元素的位置的情况下&#xff0c;增删元素能在常数时间…

Oracle010316,安装oracle后登录时出现 ERROR: ORA-01031 insufficient privileges

运行环境&#xff1a;在自己笔记本电脑上安装测试操作系统版本&#xff1a;64位win8.1oracle版本&#xff1a;64位 oracle 11g安装oracle 成功后//以管理员身份登录oracle在cmd里输入命令 sqlplus / as sysdba然后 报错 ERROR: ORA-01031 insufficient privileges解决办法&…

C++ 双向队列

deque 也是顺序容器的一种&#xff0c;同时也是一个可变长数组。要使用 deque&#xff0c;需要包含头文件 deque。所有适用于 vector 的操作都适用于 deque。 deque 和 vector 有很多类似的地方。在 deque 中&#xff0c;随机存取任何元素都能在常数时间内完成。它相比于 vect…

C++ 函数对象

如果一个类将()运算符重载为成员函数&#xff0c;这个类就称为函数对象类&#xff0c;这个类的对象就是函数对象。函数对象是一个对象&#xff0c;但是使用的形式看起来像函数调用&#xff0c;实际上也执行了函数调用&#xff0c;因而得名。 函数对象的例子。 #include <i…

sencha app watch php,我的第一个基于SenchaTouch的WebApp

经过进一周的各种折腾&#xff0c;各种想放弃&#xff0c;各种纠结&#xff0c;最终还是顺利的完成了SenchaTouch的开发&#xff0c;回想起来感觉“甜甜的”&#xff0c;也充分体会到Sencha MVC开发模式的好处&#xff0c;以及SenchaTouch.js和Extjs的强大和牛逼&#xff0c;不…

C++关联容器,STL关联容器

关联容器内部的元素都是排好序的&#xff0c;有以下四种。 set&#xff1a;排好序的集合&#xff0c;不允许有相同元素。multiset&#xff1a;排好序的集合&#xff0c;允许有相同元素。map&#xff1a;每个元素都分为关键字和值两部分&#xff0c;容器中的元素是按关键字排序的…

linux练习 串口跟进程6,linux下串口测试程序

linux下串口测试程序通过简单的参数配置&#xff0c;执行文件串口号波特率#include stdio.h#include stdlib.h#include unistd.h#include sys/types.h#include sys/stat.h#include fcntl.h#include errno.h#include sys/time.h#include time.h#include string.h#include sys/io…

C++ pair类模板

在学习关联容器之前&#xff0c;首先要了解 STL 中的 pair 类模板&#xff0c;因为关联容器的一些成员函数的返回值是 pair 对象&#xff0c;而且 map 和 multimap 容器中的元素都是 pair 对象。pair 的定义如下&#xff1a; template <class_Tl, class_T2> struct pair…

kali linux关闭进程,技术|如何使用 Kali Linux 黑掉 Windows

Kali Linux 派生自 Debian Linux&#xff0c;主要用于渗透测试&#xff0c;拥有超过 300 个的预安装好的渗透测试工具。Metasploit 项目中 Metasploit 框架支持 Kali Linux 平台&#xff0c;Metasploit 是一个用于开发和执行安全利用代码(security exploit)的工具。让我们来使用…

C++ multiset

multiset 是关联容器的一种&#xff0c;是排序好的集合&#xff08;元素已经进行了排序&#xff09;&#xff0c;并且允许有相同的元素。 不能直接修改 multiset 容器中元素的值。因为元素被修改后&#xff0c;容器并不会自动重新调整顺序&#xff0c;于是容器的有序性就会被破…

linux命令中的cp,Linux高级技术:关于cp命令中拷贝所有的写法

Linux高级技术&#xff1a;关于cp命令中拷贝所有的写法发布时间:2007-09-30 21:39:36来源:红联作者:GiftPot今天在编写一个脚本的时候&#xff0c;发现一个比较奇怪的问题&#xff1a;就是在使用cp拷贝当前目录下所有文件到目标目录的时候&#xff0c;源和目标目录大小不同。原…

C++ set

set 是关联容器的一种&#xff0c;是排序好的集合&#xff08;元素已经进行了排序&#xff09;。set 和 multiset 类似&#xff0c;它和 multiset 的差别在于 set 中不能有重复的元素。multiset 的成员函数 set 中也都有。 不能直接修改 set 容器中元素的值。因为元素被修改后…

linux内核实现ipsec,IP XFRM配置示例:利用linux kernel自带的IPSec实现,手动配置IPSec...

1、拓扑192.168.18.101 <> 192.168.18.1022、配置192.168.18.101ip xfrm state add src 192.168.18.101 dst 192.168.18.102 proto esp spi 0x00000301 mode tunnel auth md5 0x96358c90783bbfa3d7b196ceabe0536b enc des3_ede 0xf6ddb555acfd9d77b03ea3843f2653255afe8e…

linux 内核 82540网卡,Linux网卡as4.2 编译安装及配置准备

Linux网卡as4.2 编译安装及配置准备[日期&#xff1a;2008-03-28]来源&#xff1a;Linux公社作者&#xff1a;Linux整理[字体&#xff1a;大 中 小]确定make gcc kernel-devel包必须安装,没安装的话需要手动安装查看是否安装方法rpm -aq|gccrpm -aq|makerpm -aq|kernel-devel解…

C++ 容器适配器

STL 中的容器适配器有 stack、queue、priority_queue 三种。它们都是在顺序容器的基础上实现的&#xff0c;屏蔽了顺序容器的一部分功能&#xff0c;突出或增加了另外一些功能。 容器适配器都有以下三个成员函数&#xff1a; push&#xff1a;添加一个元素。top&#xff1a;返…