C++(五十一) — 容器中常见算法(查找、排序、拷贝替换)
1、find();
find()算法的作用是在指定的一段序列中查找某个数,包含三个参数,前两个参数是表示元素范围的迭代器,第三个参数是要查找的值。
例:fing(vec.begin(), vec.end(), val); //在vec中查找值val,该val可以是数字、字符串。
2、count();
count()算法的作用是查看给定序列中给定值出现的次数,同样包含三个参数,前两个参数是表示元素范围的迭代器,第三个参数是要查找的值。
例:count(vec1.begin(), vec1.end(), 2);//在vec1中查看2出现的次数。
3、find_if();
find_if()算法的作用是在输入序列中查找第一个满足条件的元素,返回第一个指向满足条件的元素的迭代器。
例:auto wc = find_if(vec.begin(), vec.end(), [sz](const string &a){return a.size>=sz;});//其中sz为在使用find_if的函数内部定义的局部变量。
上诉算法得到的是第一个指向长度不小于sz的元素的迭代器,如果没有则返回vec.end();
4、count_if();
预先定义比较函数;
bool GreatThree(int num) { return num > 3; } int num = count_if(v1.begin(), v1.end(), GreatThree);
5、for_each();
for_each()算法的主要作用是打印输出序列。接收三个参数,前两个为打印元素的范围,后一个为一个可调用对象。
例:for_each(wc, vec.end(), [](const string &s){cout << s << " ";});
cout << endl;
上述程序的作用就是打印输出序列中从wc到vec.end()中的元素。
6、adjacent_find();
查找重复元素,并返回第一个出现的位置。
例:vector<int>::iterator it = adjacent_find(vec.begin(), vec.end());
7、binary_search();
在有序序列中查找,找到后返回 true,注意,在无序序列中不可使用。
例:bool bFind = binary_search(setInt.begin(), setInt.end(), 5);
排序
8、merge(); 或者 sort(); 形式类似。
合并两个有序序列,放到另一个序列中。
int main() { // v1 + v2 = v3 vector<int> v1, v2, v3; v1.push_back(1); v1.push_back(3); v1.push_back(5); v2.push_back(2); v2.push_back(4); v2.push_back(6); v3.resize(9); merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); //输出 1 2 3 4 5 6 7 8 9 vector<int>::iterator it; for (it = v3.begin(); it != v3.end(); ++it) { cout << *it << endl; } system("pause"); return 0; }
9、random_shuffle()
随机打乱顺序,也可应用于字符串。
例:random_shuffle(v1.begin(), v1.end());
10、reverse()
倒序输出。
reverse(v1.begin(), v1.end());
拷贝替换
11、copy()
copy(v1.begin(), v1.end(), v3.begin());
12、replace(); replace_if();
replace(v1.begin(), v1.end(), 3, 8);//把容器v1中所有值为 3 的元素,替换为 8 。
bool greaterEqual5(int &n) { return n >= 5; } // 容器中所有 满足条件的都替换为 8 replace_if(v1.begin(), v1.end(), greaterEqual5, 8);