(STL)泛型函数③-复制/删除/替换算法(常用)

目录

1.copy() 【拷贝】

2.remove()和erase() 【移动和清除】

3.replace()  【替换】

4.unique() 



1.copy() 【拷贝】

传入三个参数:起始位置,终止位置,拷贝的目标容器的起始位置

例:

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2(3); 
    std::copy(vec1.begin(), vec1.end(), vec2.begin());

    for (auto i : vec2) {
        std::cout << i << " "; // 输出:1 2 3
    }
    
    return 0;
}

2.remove()和erase() 【移动和清除】

remove() 函数用于从容器中删除指定值的元素,并将这些元素移到容器的末尾。但是,remove() 不会实际删除元素,它只是将指定值的元素移到末尾,并返回一个指向新的逻辑结尾的迭代器,所以,一般会和erase()函数配合使用

remove()函数传入三个参数:起始位置,终止位置,需要删除的值

erase()函数有两种重载形式,参数数量和含义也略有不同:

(1)erase(pos):删除指定位置上的元素

(2)erase(first,end):删除指定范围内的元素

例:

(二者配合使用):

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 删除值为3的元素
    auto it = std::remove(vec.begin(), vec.end(), 3);

    // 将被删除的元素后面的元素进行压缩
    vec.erase(it, vec.end());

    for (auto i : vec) {
        std::cout << i << " "; // 输出:1 2 4 5
    }

    return 0;
}

(单独使用erase()函数):

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 删除索引为2的元素
    vec.erase(vec.begin() + 2);

    for (auto i : vec) {
        std::cout << i << " "; // 输出:1 2 4 5
    }

    std::cout << std::endl;

    // 删除索引为1到3的元素
    vec.erase(vec.begin() + 1, vec.begin() + 4);

    for (auto i : vec) {
        std::cout << i << " "; // 输出:1 5
    }

    return 0;
}

3.replace()  【替换】

传入四个参数:起始位置,终止位置,被替换的值,替换后的值

例:

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 2, 3, 4, 2, 5};
    std::replace(vec.begin(), vec.end(), 2, 6);

    for (auto i : vec) {
        std::cout << i << " "; // 输出:1 6 6 3 4 6 5
    }

    return 0;
}

4.unique() 

用于移除容器中相邻的重复元素,使得容器中的所有不重复的元素都位于容器的开始部分,并返回一个指向新的逻辑结尾的迭代器。但是需要注意的是, unique() 只会移除相邻的重复元素,而不会移除不相邻的重复元素

例:

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 2, 3, 3, 4, 5, 5};

    // 去除容器中的相邻重复元素
    auto it = std::unique(vec.begin(), vec.end());

    // 擦除重复元素后的多余部分
    vec.erase(it, vec.end());

    for (auto i : vec) {
        std::cout << i << " "; // 输出:1 2 3 4 5
    }

    return 0;
}

---------------------------------------------------------------------------------------------------------------------------------

觉得有用就点点关注收藏一下吧~谢谢支持~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值