算法是什么
在C++中,算法是一种可重复复用的处理数据的程序模版,其目的是优化数据处理效率和提高代码复用度。C++标准库提供了许多算法,包括查找、排序、遍历等等。我们可以使用它们来进行各种各样的处理,比如搜索、去重、统计等等。
算法的特征:
- 输入是一组数据;
- 输出是对这组数据进行一些处理后得到的新数据;
- 通常具有可重复、可复用的特性;
- 实现它们的方法是通过函数。
C++标准库中的算法
C++标准库中提供了大量的算法,我们可以直接使用这些算法来处理各种数据。
查找算法
find
find算法用于在指定区间内查找第一个等于指定值的元素,并返回该元素的迭代器。
示例代码:
vector<int> v {1, 5, 7, 9, 12};
auto it = find(v.begin(), v.end(), 7);
if(it != v.end()) {
cout << "Found " << *it << endl;
}
else {
cout << "Not found" << endl;
}
binary_search
binary_search算法用于在已排序的指定区间内查找是否存在指定值。
示例代码:
vector<int> v {1, 3, 5, 7, 9, 12};
if(binary_search(v.begin(), v.end(), 7)) {
cout << "Found 7" << endl;
}
else {
cout << "Not found" << endl;
}
排序算法
sort
sort算法用于对指定区间内的元素进行排序,可以通过自定义比较器来实现自定义排序。
示例代码:
vector<int> v {9, 7, 5, 3, 1};
sort(v.begin(), v.end());
for(auto x : v) {
cout << x << " ";
}
cout << endl;
stable_sort
stable_sort算法与sort类似,但是它不保证相等元素的原有顺序不变,它可以通过指定自定义比较器来实现自定义排序。
示例代码:
struct Person {
string name;
int age;
};
bool cmp(const Person& lhs, const Person& rhs) {
return lhs.age < rhs.age;
}
vector<Person> v {{"Tom", 18}, {"Jerry", 20}, {"Alice", 18}};
stable_sort(v.begin(), v.end(), cmp);
for(auto& x : v) {
cout << x.name << "-" << x.age << " ";
}
cout << endl;
总结
C++标准库中提供了丰富的算法函数,对于数据处理和算法设计都有很好的帮助和支持。了解和掌握这些算法非常有助于提高程序效率和提高代码复用度。