C++primer学习:泛型算法(1)

[1]大多数算法都定义在algorithm中,它们不依赖于容器的类型(迭代器作为参数);算法只运行在迭代器之上!!!

//count是一个计算某元素给定范围出现次数的操作
    vector<int> vec{ 1, 2, 3, 3, 2, 2, 25, 6, 7, 8, 2 };
    vector<double> vdc{12, 34, 56, 78};

    cout << count(vdc.cbegin(), vdc.cend(), 12)<<endl;//不同类型,但是操作一样
    cout<<count(vec.cbegin(), vec.cend(), 2)<<endl;
    return 0;

[2]accumulate()算法

第三个参数必须可以与前面的相加.

    vector<string> L = { "aa", "aaa", "aa", "cc" };
    string sum = accumulate(L.cbegin(), L.cend(), string());//传递""是不可以的
    vector<double> L = {1.1 ,2,3,4,5 };
    double sum = accumulate(L.cbegin(), L.cend(), 0.0);//0会损失精度

[3]equal()算法,比较两个容器的元素是否一样.第二个容器必须要的元素要不少于第一个.


     std::equal(roster1.cbegin(), roster1.cend(), roster2.cbegin());

=====================================================================================

[4]写入算法:fill/fill_n:fill是向容器中写入元素,第一个参数代表目标起始位置,后一个表示写入的个数,最后一个表示写入的值(fill_n多一个写入值的个数).但是要确保容器有足够空间来写入. 与assign的区别,assign只能对整个容器赋值.

如果要确保空间足够,可以用back_inserter:插入迭代器作为目标位置.但是这是添加元素,而不是简单改写元素的值.

    vector<int> a{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    fill_n(a.begin(), a.size(), 0);

你可能感兴趣的:(C++primer学习:泛型算法(1))