首页 > 编程语言 > 详细

STL常用算法(持续更新)

时间:2021-01-29 23:31:52      阅读:29      评论:0      收藏:0      [点我收藏+]

一、遍历函数

1.for_each遍历函数

#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>

//for_each遍历函数

//普通函数
void pri(int val)
{
    cout << val << " ";
}

class myprint
{
public:
    void operator()(int val1)
    {
        cout << val1 << " ";
    }
};

int main(void)
{
    vector<int> v;
    for (int i = 0; i < 10; i++)
        v.push_back(i);

    for_each(v.begin(), v.end(), pri);

    cout <<endl<< "-----------------------------" << endl;

    for_each(v.begin(), v.end(), myprint());
    return 0;

}

 二.拷贝函数

1.copy

//#include<stdio.h>
//#include<stdlib.h>
//#include<math.h>
//#include<string.h>
//
//
//int sum = 0;
//int queueB[10] = { 0 };
//void show(int queue[],int m)
//{
//    for (int i = 0; i < m; i++)
//    {
//        printf("%d ", queue[i]+1);
//    }
//    printf("\n");
//}
//
//int check(int k,int queue[])
//{
//    for(int row = 0;row<k;row++)
//        if(queue[row] == queue[k] || abs(queue[row]-queue[k]) == abs(k-row ))
//            return 0;
//    return 1;
//}
//
//void queue_eightB(int n, int queue[], int m, int** a)
//{
//    if (n < m)
//    {
//        for (int i = 0; i < m; i++)
//        {
//            if (a[n][i] == 1 || queue[n] != i)
//            {
//                queueB[n] = i;
//                if (check(n, queueB))
//                    queue_eightB(n + 1, queue, m, a);
//            }
//
//        }
//    }
//    else
//    {
//        sum++;
//    }
//}
//void queue_eight(int n,int queue[],int m,int **a)
//{
//    if (n < m)
//    {
//        for(int i = 0;i<m;i++)
//        {
//            if (a[n][i] == 1)
//            {
//                queue[n] = i;
//                if (check(n, queue))
//                    queue_eight(n + 1, queue, m,a);
//            }
//
//        }
//    }
//    else
//    {
//        queue_eightB(0, queue, n, a);
//    }
//}
//
//int main(void)
//{
//    int n;
//    scanf("%d", &n);
//    int* queue = (int*)malloc(sizeof(int) * n);
//    int** a = (int**)malloc(sizeof(int*) * n);
//    for (int i = 0; i < n; i++)
//    {
//        a[i] = (int*)malloc(sizeof(int) * n);
//    }
//    for (int i = 0; i < n; i++)
//    {
//        for (int j = 0; j < n; j++)
//        {
//            scanf("%d", &a[i][j]);
//        }
//    }
//    queue_eight(0,queue,n,a);
//
//    printf("%d",2* sum);
//
//    return 0;
//}

#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>


class myprint
{
public:
    
    void operator()(int val)
    {
        cout << val << " ";
    }
};
//copy算法功能:容器内指定范围的元素拷贝到另一容器

int main(void)
{
    vector<int> v1;
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
    }
    vector<int> v2;
    v2.resize(v1.size());

    copy(v1.begin(), v1.end(), v2.begin());

    for_each(v2.begin(), v2.end(), myprint());

    return 0;
}

 三、集合算法

   求并集

技术分享图片技术分享图片

#include<iostream>
using namespace std;
#include<algorithm>
#include<vector>

void myprint(int val)
{
    cout << val << " ";
}
//集合合并set_union
int main(void)
{
    vector<int> v1;
    vector<int>v2;//要求并集的两个容器,且两个容器需要是有序的
    for (int i = 0; i < 10; i++)
    {
        v1.push_back(i);
        v2.push_back(i + 5);
    }
    vector<int>v3;//目标容器
    v3.resize(v1.size() + v2.size());// 放置并集前需要先分配大小
    vector<int>::iterator itend =     set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());//返回目标容器最后放置数的迭代器
    for_each(v3.begin(), itend, myprint);
    cout << endl;
    return 0;
}

 

STL常用算法(持续更新)

原文:https://www.cnblogs.com/loliconsk/p/14287107.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!