文章目录
拷贝算法(Copy Algorithms)
1. std::copy
std::copy
用于从一个容器的范围复制元素到另一个容器。其基本形式如下:
std::copy(first, last, result);
其中first
和last
表示源容器的起始和结束迭代器,result
表示目标容器的起始位置。
示例代码:
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> source = {1, 2, 3, 4, 5};
std::vector<int> destination(5);
std::copy(source.begin(), source.end(), destination.begin());
for (const auto& num : destination) {
std::cout << num << " ";
}
return 0;
}
2. std::copy_if
std::copy_if
用于仅复制满足特定条件的元素到目标容器。其使用方法类似于std::copy
,但额外接受一个谓词函数来指定条件。
示例代码:
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> source = {1, 2, 3, 4, 5};
std::vector<int> evenNumbers;
std::copy_if(source.begin(), source.end(), std::back_inserter(evenNumbers),
[](int x) { return x % 2 == 0; });
for (const auto& num : evenNumbers) {
std::cout << num << " ";
}
return 0;
}
3. std::copy_n
std::copy_n
复制源范围中的指定数量的元素到目标容器。其语法为:
std::copy_n(first, count, result);
替换算法(Replace Algorithms)
1. std::replace
std::replace
用于将容器中的特定值替换为另一个值。
示例代码:
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 2, 3, 4, 2, 5};
std::replace(numbers.begin(), numbers.end(), 2, 9);
for (const auto& num : numbers) {
std::cout << num << " ";
}
return 0;
}
2. std::replace_if
std::replace_if
允许根据特定条件替换元素。
示例代码:
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::replace_if(numbers.begin(), numbers.end(), [](int x) { return x > 3; }, 0);
for (const auto& num : numbers) {
std::cout << num << " ";
}
return 0;
}
std::swap 函数
std::swap
用于交换两个对象的值。它是一种通用的函数,因此适用于多种类型,包括基本类型和用户自定义类型。
使用方法
std::swap(a, b);
这里的 a
和 b
可以是任何可交换值的对象,比如整数、浮点数、字符串、自定义类型等。
示例代码
#include <iostream>
#include <algorithm>
int main() {
int x = 5, y = 10;
std::cout << "Before swap: x = " << x << ", y = " << y << std::endl;
std::swap(x, y);
std::cout << "After swap: x = " << x << ", y = " << y << std::endl;
return 0;
}
std::swap
的一个主要优点是它可以适用于各种类型,而不仅仅局限于基本数据类型。它也可用于自定义类型,只要该类型定义了合适的交换操作。
自定义类型中的 std::swap
对于自定义类型,可以利用 std::swap
来实现对象值的交换。例如:
#include <iostream>
#include <algorithm>
class MyType {
public:
int value;
// 构造函数等定义
friend void swap(MyType& first, MyType& second) {
using std::swap;
swap(first.value, second.value);
}
};
int main() {
MyType obj1 = {5};
MyType obj2 = {10};
std::cout << "Before swap: obj1.value = " << obj1.value << ", obj2.value = " << obj2.value << std::endl;
std::swap(obj1, obj2);
std::cout << "After swap: obj1.value = " << obj1.value << ", obj2.value = " << obj2.value << std::endl;
return 0;
}
std::swap
在自定义类型中可以通过友元函数实现,允许自定义类型利用这个标准函数进行对象值的交换。