算法笔记--c++STL

本文介绍了一个使用C++实现的程序,该程序能够处理图书馆进出人员记录以确定图书馆的最小容纳人数,并演示了如何生成字符串的所有可能排列。
vector

给你一些图书馆进出人员列表,每个人有不同数字编号。。问图书馆的最小容纳人数。。。

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
vector<int> L;
int main()
{
    int n;
    L.clear();
    scanf("%d",&n);
    int out=0;
    while(n--)
    {
        getchar();
        int x;
        char c;
        scanf("%c %d",&c,&x);
        vector<int>::iterator result=find(L.begin(),L.end(),x); //查找x
        if (result==L.end()&&c=='+')  //没找到
        {
            L.push_back(x);
            int a=L.size();
            out=max(out,a);
        }
        else if(result==L.end()&&c=='-')
        {
            out++;
        }
        else if(result!=L.end()&&c=='-')//找到了
        {
            L.erase(result);
        }
       // else if(result!=L.end()&&c=='+') //不存在
    }
    printf("%d\n",out);
    return 0;
}
排列

直接用c++中的next_permutation 表示产生下一个全排列。

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int len;
    char a[250];
    while(gets(a))
    {
       len=strlen(a);
       sort(a,a+len);
       printf("%s\n",a);
        while(next_permutation(a,a+len))
        {
            printf("%s\n",a);
        }
    }
    return 0;
}
### C++ STL 算法的学习资源 C++标准模板库(STL)是一个强大的工具集合,其中包含了多种数据结构和算法[^1]。对于初学者来说,掌握这些内容可以显著提高编程能力和代码质量。 #### 常见的STL算法分类及其头文件 STL中的算法主要分布在以下几个头文件中: - `<algorithm>` 提供了大量通用算法,例如排序、查找等。 - `<numeric>` 主要用于数值计算操作。 - `<functional>` 定义了一些函数对象(也称为仿函数),可用于自定义算法行为[^2]。 #### 具体算法介绍 以下是几个常用的STL算法以及它们的功能描述: 1. **填充类算法** - `fill` 和 `fill_n`: 将指定值赋给一定范围内的元素。 ```cpp std::vector<int> vec(5); std::fill(vec.begin(), vec.end(), 7); // 所有元素变为7 ``` - `generate` 和 `generate_n`: 使用回调函数来填充容器。 ```cpp std::vector<int> vec(5); int counter = 0; std::generate(vec.begin(), vec.end(), [&counter]() { return ++counter; }); ``` 2. **排序与搜索** - 排序:`std::sort`, `std::stable_sort`. ```cpp std::vector<int> vec = {5, 3, 8, 6}; std::sort(vec.begin(), vec.end()); // 升序排列 ``` - 查找:`std::find`, `std::binary_search`. ```cpp auto it = std::find(vec.begin(), vec.end(), 8); bool found = (it != vec.end()); ``` 3. **变换与复制** - 变换:`std::transform`. 对序列应用某个函数并存储结果。 ```cpp std::vector<int> input = {1, 2, 3}, output(input.size()); std::transform(input.begin(), input.end(), output.begin(), [](int x){return x * 2;}); ``` - 复制:`std::copy`. 把一个区间的内容拷贝到另一个位置。 ```cpp std::vector<int> src = {1, 2, 3}, dst(src.size()); std::copy(src.begin(), src.end(), dst.begin()); ``` 以上仅列举了一部分基础算法,更多高级特性可以通过查阅官方文档或相关书籍深入理解。 #### 学习建议 为了更好地理解和运用C++ STL算法,推荐采取以下方法: - 阅读权威教材如《Effective STL》或者在线教程。 - 实践编写程序解决实际问题,在动手过程中加深印象。 - 利用社区论坛交流经验心得,比如Stack Overflow上有很多针对特定场景的应用案例讨论。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值