C++primer--泛型算法初識

  • 在這裏,我想說的重點是對於泛型算法,他的特點是不直接操縱容器,這是最主要的特點,這也就意味着他不會直接對容器進行操作。
    • 例如容器的增刪改移,算法接受的是迭代器,對迭代以及接收到的迭代器範圍元素進行算法處理,而在這個過程中,就算容器發生了元素的增刪改移的事件,算法對容器也不負責,主要是迭代器的責任,這也是算法的特殊之處。
  • 前兩個小節的主要算法如下:
    #include<iostream>
    #include<algorithm>
    #include<numeric>
    #include<vector>
    #include <iterator>
    using namespace std;
    void output_date(const vector<int>&s)
    {
            for (auto i = s.begin(); i != s.end();i++)
            {
                cout << *i << "  " ;
            }
            cout << endl;

    }
    int main(int argc, char **argv)
    {
        vector<int>vec{ 1, 1,1,1,1,1,1,32, 5, 6, 34, 312, 6, 21, 5, 35, 0 };
        auto result = find(vec.begin(),vec.end(),18);
        cout << ((result==vec.end())?"is not present":"i s the present") << endl;
        int al[10] = { 213, 43, 76, 324, 67, 453, 21, 76, 4, 214 };
        auto resultl = find(al + 1, al + 4, 21);
        cout << *resultl<<endl;
        auto resultnum = count(vec.begin(),vec.end(),1);//count也需要三個參數統計數值出現的次數
        auto sum = accumulate(vec.begin(), vec.end(), 0);
        auto ittsum = accumulate(al, al + 10, 0);
        cout << sum << " " << ittsum << endl;
        cout <<resultnum << endl;
        vector<string>str={ "-86", "-679", "-2341", "-4542", "-213" };
        vector<string>str1= { "-86", "-679", "-2341", "-4542", "-213" };
        string sumstring = accumulate(str.cbegin(),str.cend(),string(""));
        auto res = equal(str.begin(), str.end(), str1.begin());
        cout << res<<endl;
        vector<double>vec1{ 1, 1.3, 1, 1, 1, 1.2, 1, 32, 5, 6, 34, 312, 6, 21, 5, 35, 0 };
        vector<double>vec2{ 1, 1, 1, 1, 1, 1, 1, 32, 5, 6, 34, 312, 6, 21, 5, 35, 0 };
        auto doubres=accumulate(vec1.cbegin(), vec1.cend(), 0.0);
        cout << doubres << endl;
        vector<int >lla;
        auto it = back_inserter(lla);
        *it = 22;
        fill_n(back_inserter(lla), 10, 0);//添加10個元素到lla中;
        sort(vec.begin(), vec.end());
        output_date(vec);
        unique(vec.begin(), vec.end());
        output_date(vec);
        system("pause");
        return 0;
    }

測試結果如下:
這裏寫圖片描述
對於結果主要有兩點解釋:
- 1. 對於上面的sort一次排序後倒數第二行出現有序的結果,然後在使用unique算法後出現的顯示是這麼的原理,因爲unique的作用是去除排序後的相等重複元素,只留下一個。但是算法對容器是不會具有真正的操作權限的 ,他只是操縱迭代器對容器進行操作,在這個過程中,算法根本就不知道容器這個玩意兒,所以在去除重複元素後將其餘元素按照順序依次排列,但是這個過程中,容器的元素數量是不會發生改變的,所以後面會出現什麼算法是不知道的剩下的就是,迭代器的事了。

主要代碼就是這上面的了,如有錯誤歡迎指出
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章