一段代码让你了解基本泛型算法

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
    cout << "Hello World!" << endl;
    //vecotr动态数组的空间分配策略:
        vector<int> v;  //用容器模板定义v
        v.reserve(20); //将空间设定为20
        for(int i = 0; i < 20; i++)
        {
            //cout << "有效元素的个数:" << v.size() << "容器对象的容量的空间大小:" << v.capacity() << endl;
            v.push_back(rand() % 100 + 1); //插入1-100之间的数
        }

        //遍历vector容器:其中iterator是迭代器
        for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
        {
            cout << *it << " ";
        }
        cout << endl;
        //遍历vector容器:auto能自动判断it的类型
        for(auto it = v.begin(); it != v.end(); it++)
        {
            cout << *it << " ";
        }
        cout << endl;
        //在迭代器支持的情况下,枚举for循环:
        for(int k:v) //k的值会随着迭代器值的更改发生变化,即容器中的值会不断赋值给k
        {
            cout << k << " ";
        }
        cout << endl;
        //使用泛型算法遍历容器:
        for_each(v.begin(),v.end(),[](int val){cout << val << " ";});
        cout << endl;
        //需求:在容器的偶数元素前插入一个100的值
        for(auto it = v.begin();it != v.end();it++)
        {
            if(*it%2 == 0){
                it = v.insert(it,100);
                it++;
            }
        }
        for(int k:v)
        {
            cout << k << " ";
        }
        cout << endl;
        for(auto it = v.begin(); it != v.end();)
        {
            if(*it%2 == 0 && *it == 100){
                it = v.erase(it);
            }else{
                it++;
            }
        }
        for(int k:v){
            cout << k << " ";
        }
        cout << endl;
        //使用sort排序算法 ,lambda用作自定义的排序规则,返回值为true表示1应该在2前
        sort(v.begin(),v.end(),[](int val1,int val2){return val1 > val2;});
        for(int k:v){  //输出的是倒序排列的
            cout << k << " ";
        }
        cout << endl;
        //使用二分法查找某个数据是否在这个已经排序的序列中,必须是已经排序的序列
        //greater<int> 表示按照降序进行比较,less<int>是按照升序进行比较
        bool ok = binary_search(v.begin(),v.end(),70,greater<int>());
        if(ok){
            cout << "70在这个已经排序的序列中" << endl;
        }else{
            cout << "不在这个已经排序的序列中" << endl;
        }
        //find与findif 在数列中查找某个元素:返回某个第一位出现位置的迭代器
        auto it = find(v.begin(),v.end(),70);
        if(it != v.end()){
            cout << "70所在的下标位置" << it-v.begin() << endl;
        }else{
            cout << "没有找到70这个值" << endl;
        }
        //按序插入39,find_if用于在指定范围内查找出现的第一个元素,区间左闭右开
        //lambda表达式,定义查找条件,并返回一个bool值,表示是否满足条件
        //如果这个值小于39,则在该位置插入39
        it = find_if(v.begin(),v.end(),[](int val){return val< 39;});
        if(it != v.end()){
            it = v.insert(it,39);
        }else{
            cout << "没有找到符合条件的元素" << endl;
        }
        for(int k:v){
            cout << k << " ";
        }
        cout << endl;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值