C++中的Algorithm头文件、迭代器、STL基本容器

1,Algorithm意为“算法”,是C++的标准模板库(STL)中的重要头文件之一,提供了大量基于迭代器的非成员模板函数,此处介绍一下find(),swap(),sort(),for_each(). 

对于一个容器vector<int> nums={8,7,5,4,2,9,6,1,3,0};

find(nums.begin(),nums.end(),4); 

返回第一次出现4的位置的迭代器(可以理解为指针,但不同)。

想要得到4所在位置的下标,可以写作 
find(nums.begin(),nums.end(),4)-nums.begin(); 
注:若未找到则返回nums.end()

swap:swap(nums[0],nums[2]); 

交换nums中下标为0和下标为2的元素。

sort:sort(nums.begin(),nums.end(),[](int n1,int n2){return n1<n2;}); 
对nums进行从小到大排序 
排序规则参照第三个参数,使其nums中所有元素满足函数return true; 
即里面任意两个元素n1,n2且n1下标小于n2,满足n1

sort(nums.begin(),nums.end(),[](int n1,int n2){return n1>n2;});
  • 1

注:前两个参数为需要排序的范围。排序法为快速排序。如需要稳定排序则可以使用stable_sort代替即可。

for_each: for_each(nums.begin(),nums.end(),[](int n){cout<<n<<" ";});  
此函数可以对参数1到参数2范围内的元素执行参数3函数内容。 

以上语句可以把nums内所有元素执行cout并输出一个空格。

扫描二维码关注公众号,回复: 1895469 查看本文章

2,迭代器是一种检查容器内元素并遍历元素的数据类型。C++更趋向于使用迭代器而不是下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只用少数容器(如vector)支持下标操作访问容器元素。


每种容器都定义了自己的迭代器类型,如vector:

vector<int>::iterator    iter;    //定义一个名为iter的变量

  每种容器都定义了一对名为begin和end的函数,用于返回迭代器。下面对迭代器进行初始化操作:
vector<int>    ivec;
vector<int>::iterator    iter1=ivec.begin();    //将迭代器iter1初始化为指向ivec容器的第一个元素
vector<int>::iterator   iter2=ivec.end();    //将迭代器iter2初始化为指向ivec容器的最后一个元素的下一个位置

  注意end并不指向容器的任何元素,而是指向容器的最后元素的下一位置,称为超出末端迭代器。如果vector为空,则begin返回的迭代器和end返回的迭代器相同。一旦向上面这样定义和初始化,就相当于把该迭代器和容器进行了某种关联,就像把一个指针初始化为指向某一空间地址一样。

使容器中每一个元素置零。

for(vector<int>::iterator iter=ivec.begin();iter!=ivec.end();++iter)

        *iter=0;

3,C++STL基本容器

定义:

c++中有两种类型的容器:顺序容器和关联容器,顺序容器主要有:vector、list、deque等。其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实现。deque与vector类似,但是对于首元素提供删除和插入的双向支持。关联容器主要有map和set。map是key-value形式的,set是单值。map和set只能存放唯一的key值,multimap和multiset可以存放多个相同的key值。

几种容器的比较:

1)vector
内部数据结构:数组。
在末尾增加或者删除元素所需时间与元素数目无关,在中间或者开头增加或者删除元素所需时间是随元素数目呈线性变化。
2)deque
内部数据结构是:数组
随机访问每个元素,所需要的时间为常量。在开头和末尾增加元素所需时间与元素数目无关,在中间增加或删除所需时间随元素数目呈线性变化。
3)list
内部数据结构:双向环状链表
不能随机访问一个元素,可双向遍历,在开头,末尾和中间的任何地方增加或者删除元素所需时间都是常量。
4)set
键和值相等。
键唯一
元素默认按升序排列
5)map
键唯一,
元素默认按键的升序排列


猜你喜欢

转载自blog.csdn.net/bubbler_726/article/details/80884127
今日推荐