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);

 

 

posted @ 2019-06-10 17:31  深度机器学习  阅读(1486)  评论(0编辑  收藏  举报