C++ 标准库中常见的功能函数

  • std::copy
    作用:复制一个范围内的元素到另一个范围。
    返回值:返回目标范围最后一个元素之后的迭代器。
    使用示例:std::copy(src.begin(), src.end(), dest.begin());

  • std::copy_n
    作用:复制指定数量的元素到目标范围。
    返回值:返回目标范围最后一个元素之后的迭代器。
    使用示例:std::copy_n(src.begin(), 3, dest.begin());

  • std::move
    作用:移动一个范围内的元素到另一个范围。
    返回值:返回目标范围最后一个元素之后的迭代器。
    使用示例:std::move(src.begin(), src.end(), dest.begin());

  • std::fill
    作用:用指定的值填充范围。
    返回值:无。
    使用示例:std::fill(vec.begin(), vec.end(), 10);

  • std::fill_n
    作用:用指定的值填充指定数量的元素。
    返回值:返回最后一个填充元素之后的迭代器。
    使用示例:std::fill_n(vec.begin(), 3, 20);

  • std::for_each
    作用:对范围内的每个元素应用指定的操作。
    返回值:返回传入的函数对象。
    使用示例:std::for_each(vec.begin(), vec.end(), [](int n) { ... });

  • std::reverse
    作用:反转范围内元素的顺序。
    返回值:无。
    使用示例:std::reverse(vec.begin(), vec.end());

  • std::sort
    作用:对范围内的元素进行排序。
    返回值:无。
    使用示例:std::sort(vec.begin(), vec.end());

  • std::find
    作用:查找范围内第一个匹配指定值的元素。
    返回值:返回找到的元素的迭代器。
    使用示例:auto it = std::find(vec.begin(), vec.end(), 3);

  • std::count
    作用:统计范围内匹配指定值的元素数量。
    返回值:返回匹配元素的数量。
    使用示例:int count = std::count(vec.begin(), vec.end(), 2);

  • std::unique
    作用:删除范围内相邻的重复元素。
    返回值:返回唯一元素序列末尾的迭代器。
    使用示例:auto it = std::unique(vec.begin(), vec.end());

  • std::accumulate
    作用:计算范围内元素的累加和,使用指定的初始值。
    返回值:返回累加结果。
    使用示例:int sum = std::accumulate(vec.begin(), vec.end(), 0);

  • std::min_element
    作用:查找范围内最小元素的迭代器。
    返回值:返回指向最小元素的迭代器。
    使用示例:auto it = std::min_element(vec.begin(), vec.end());

  • std::max_element
    作用:查找范围内最大元素的迭代器。
    返回值:返回指向最大元素的迭代器。
    使用示例:auto it = std::max_element(vec.begin(), vec.end());

1. std::copy

std::copy 用于将一个范围内的元素复制到另一个范围。

函数原型:

template <class InputIt, class OutputIt>
OutputIt copy(InputIt first, InputIt last, OutputIt d_first);

参数说明:
  • first:要复制的元素范围的起始迭代器。
  • last:要复制的元素范围的结束迭代器(不包括该位置的元素)。
  • d_first:目标范围的起始迭代器。
返回值:

返回目标范围内最后一个元素之后的迭代器。

使用示例:

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

int main() {
    std::vector<int> src = {1, 2, 3, 4, 5};
    std::vector<int> dest(5);  // 确保目标容器有足够的空间
    
    std::copy(src.begin(), src.end(), dest.begin());

    for (int n : dest) {
        std::cout << n << " ";
    }
    return 0;
}
输出:1 2 3 4 5

2. std::copy_n

std::copy_n 用于从给定范围开始的前 n 个元素复制到另一个范围。

函数原型:

template <class InputIt, class Size, class OutputIt>
OutputIt copy_n(InputIt first, Size n, OutputIt result);

参数说明:
  • first:要复制的元素范围的起始迭代器。
  • n:要复制的元素数量。
  • result:目标范围的起始迭代器。
返回值:

返回目标范围内最后一个元素之后的迭代器。

使用示例:

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

int main() {
    std::vector<int> src = {1, 2, 3, 4, 5};
    std::vector<int> dest(3);  // 只复制 3 个元素

    std::copy_n(src.begin(), 3, dest.begin());

    for (int n : dest) {
        std::cout << n << " ";
    }
    return 0;
}
输出:1 2 3

3. std::move

std::move 用于将一个范围的元素移动到另一个范围,而不是复制。它会使用移动语义,可以避免不必要的拷贝,适合移动非拷贝的资源如智能指针。

函数原型:

template <class InputIt, class OutputIt>
OutputIt move(InputIt first, InputIt last, OutputIt d_first);

参数说明:
  • first:要移动的元素范围的起始迭代器。
  • last:要移动的元素范围的结束迭代器。
  • d_first:目标范围的起始迭代器。
返回值:

返回目标范围内最后一个元素之后的迭代器。

使用示例:

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

int main() {
    std::vector<std::string> src = {"one", "two", "three"};
    std::vector<std::string> dest(3);

    std::move(src.begin(), src.end(), dest.begin());

    for (const auto& str : dest) {
        std::cout << str << " ";
    }
    return 0;
}
输出:one two three

4. std::fill

std::fill 用于用指定的值填充一个范围的所有元素。

函数原型:

template <class ForwardIt, class T>
void fill(ForwardIt first, ForwardIt last, const T& value);

参数说明:
  • first:要填充的范围的起始迭代器。
  • last:要填充的范围的结束迭代器。
  • value:用来填充的值。
使用示例:

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

int main() {
    std::vector<int> vec(5);

    std::fill(vec.begin(), vec.end(), 10);

    for (int n : vec) {
        std::cout << n << " ";
    }
    return 0;
}
输出:10 10 10 10 10

5. std::fill_n

std::fill_n 用于从指定起始位置开始填充 n 个元素。

函数原型:

template <class OutputIt, class Size, class T>
OutputIt fill_n(OutputIt first, Size n, const T& value);

参数说明:
  • first:要填充的范围的起始迭代器。
  • n:要填充的元素数量。
  • value:用来填充的值。
返回值:

返回最后一个填充元素之后的迭代器。

使用示例:

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

int main() {
    std::vector<int> vec(5);

    std::fill_n(vec.begin(), 3, 20);  // 只填充 3 个元素

    for (int n : vec) {
        std::cout << n << " ";
    }
    return 0;
}
输出:20,20,20,0,0

6. std::transform

std::transform 用于通过给定的函数对输入范围的每个元素进行变换,并将结果存储到另一个范围。

函数原型:

template <class InputIt, class OutputIt, class UnaryOperation>
OutputIt transform(InputIt first, InputIt last, OutputIt d_first, UnaryOperation unary_op);

参数说明:
  • first:要变换的范围的起始迭代器。
  • last:要变换的范围的结束迭代器。
  • d_first:目标范围的起始迭代器。
  • unary_op:用于对元素进行变换的函数对象或 lambda 表达式。
使用示例:

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

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

    std::transform(vec.begin(), vec.end(), result.begin(), [](int x) { return x * 2; });

    for (int n : result) {
        std::cout << n << " ";
    }
    return 0;
}
输出:2,4,6,8,10

7. std::for_each

std::for_each 用于对指定范围内的每个元素应用给定的操作。

函数原型:

template <class InputIt, class Function>
Function for_each(InputIt first, InputIt last, Function f);

参数说明:
  • first:要操作的范围的起始迭代器。
  • last:要操作的范围的结束迭代器。
  • f:用于处理每个元素的函数或函数对象。
使用示例:

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

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

    std::for_each(vec.begin(), vec.end(), [](int n) { std::cout << n << " "; });

    return 0;
}

输出:1,2,3,4,5

8. std::reverse

std::reverse 用于反转指定范围内的元素顺序。

函数原型:

template <class BidirIt>
void reverse(BidirIt first, BidirIt last);

参数说明:
  • first:要反转的范围的起始迭代器。
  • last:要反转的范围的结束迭代器。
使用示例:

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

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

    std::reverse(vec.begin(), vec.end());

    for (int n : vec) {
        std::cout << n << " ";
    }
    return 0;
}
输出:5,4,3,2,1

9. std::sort

std::sort 用于对指定范围内的元素进行排序。

函数原型:

template <class RandomIt>
void sort(RandomIt first, RandomIt last);

参数说明:
  • first:要排序的范围的起始迭代器。
  • last:要排序的范围的结束迭代器。
使用示例:

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

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

    std::sort(vec.begin(), vec.end());

    for (int n : vec) {
        std::cout << n << " ";
    }
    return 0;
}
输出:1,2,3,4,5

10. std::find

std::find 用于在指定范围内查找第一个与给定值匹配的元素。

函数原型:

template <class InputIt, class T>
InputIt find(InputIt first, InputIt last, const T& value);

参数说明:
  • first:要搜索的范围的起始迭代器。
  • last:要搜索的范围的结束迭代器。
  • value:要查找的值。
返回值:

返回找到的元素的迭代器,如果未找到,则返回 last

使用示例:

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

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

    auto it = std::find(vec.begin(), vec.end(), 3);
    if (it != vec.end()) {
        std::cout << "Found: " << *it << std::endl;
    } else {
        std::cout << "Not found" << std::endl;
    }

    return 0;
}
输出:Found : 3

11. std::count

std::count 用于计算指定范围内与给定值匹配的元素数量。

函数原型:

template <class InputIt, class T>
typename std::iterator_traits<InputIt>::difference_type
count(InputIt first, InputIt last, const T& value);

参数说明:
  • first:要搜索的范围的起始迭代器。
  • last:要搜索的范围的结束迭代器。
  • value:要计数的值。
返回值:

返回与 value 匹配的元素数量。

使用示例:

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

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

    int count = std::count(vec.begin(), vec.end(), 2);
    std::cout << "Count of 2: " << count << std::endl;

    return 0;
}
输出:Count of 2: 2

12. std::unique

std::unique 用于移除相邻重复的元素,使得每个元素唯一。

函数原型:

template <class ForwardIt>
ForwardIt unique(ForwardIt first, ForwardIt last);

参数说明:
  • first:要处理的范围的起始迭代器。
  • last:要处理的范围的结束迭代器。
返回值:

返回指向唯一元素序列末尾的迭代器。

使用示例:

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

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

    auto it = std::unique(vec.begin(), vec.end());
    vec.erase(it, vec.end());  // 移除多余的元素

    for (int n : vec) {
        std::cout << n << " ";
    }
    return 0;
}
输出:1 2 3 4

13. std::accumulate

std::accumulate 用于计算范围内元素的累加。

函数原型:

template <class InputIt, class T>
T accumulate(InputIt first, InputIt last, T init);

参数说明:
  • first:要处理的范围的起始迭代器。
  • last:要处理的范围的结束迭代器。
  • init:初始值。
返回值:

返回累加结果。

使用示例:

#include <iostream>
#include <vector>
#include <numeric>

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

    int sum = std::accumulate(vec.begin(), vec.end(), 0);
    std::cout << "Sum: " << sum << std::endl;

    return 0;
}
输出:Sum:15

14. std::min_element

std::min_element 用于找到范围内最小元素的迭代器。

函数原型:

template <class ForwardIt>
ForwardIt min_element(ForwardIt first, ForwardIt last);

参数说明:
  • first:要搜索的范围的起始迭代器。
  • last:要搜索的范围的结束迭代器。
返回值:

返回指向最小元素的迭代器。

使用示例:

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

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

    auto it = std::min_element(vec.begin(), vec.end());
    std::cout << "Min element: " << *it << std::endl;

    return 0;
}
输出:Min element: 1

15. std::max_element

std::max_element 用于找到范围内最大元素的迭代器。

函数原型:

template <class ForwardIt>
ForwardIt max_element(ForwardIt first, ForwardIt last);

参数说明:
  • first:要搜索的范围的起始迭代器。
  • last:要搜索的范围的结束迭代器。
返回值:

返回指向最大元素的迭代器。

使用示例:

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

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

    auto it = std::max_element(vec.begin(), vec.end());
    std::cout << "Max element: " << *it << std::endl;

    return 0;
}
输出:Max element: 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值