溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

STL查找、排序、替換、集合算法

發布時間:2020-07-25 21:27:04 來源:網絡 閱讀:820 作者:匯天下豪杰 欄目:編程語言

1、STL查找算法

(1)、代碼如下:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;


//查找算法?。?!
void main_adjacent_find(){
    vector<int> v1; 

    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(2);
    v1.push_back(3);
    v1.push_back(5);

    //查找第一個元素重復的位置;
    vector<int>::iterator it; 
    it = adjacent_find(v1.begin(), v1.end()); //查找第一個重復出現的數字;
    if(it == v1.end()){
        cout<<"沒有找到重復的元素"<<endl;
    }else{
        cout<<*it<<endl;
    }   

    int index = distance(v1.begin(), it); //從頭開始,的知當前迭代器的指針所在的數組下標處;
    cout<<"index:"<<index<<endl;
}

void main_binary_search(){
    vector<int> v1;

    //0 1 2 3 4 5.......n-1
    //二分法,10次就可以找到了;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);
    v1.push_back(9);

    bool b = binary_search(v1.begin(), v1.end(), 7);
    if(b == true){
        cout<<"找到了"<<endl;
    }else{
        cout<<"沒找到"<<endl;
    }
}

void main_count(){
    vector<int> v1;

    v1.push_back(1);
    v1.push_back(3);   
    v1.push_back(5);
    v1.push_back(7);
    v1.push_back(7);
    v1.push_back(9);
    v1.push_back(7);

    int num = count(v1.begin(), v1.end(), 7);

    cout<<"num:"<<num<<endl;
}

bool GreatThree(int num){
    if(num > 3){
        return true;
    }
    return false;
}

void main_count_if(){
    vector<int> v1;     

    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);
    v1.push_back(9);

    int num = count_if(v1.begin(), v1.end(), GreatThree);
    cout<<"num:"<<num<<endl;
}

void main_find(){
    vector<int> v1;

    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);
    v1.push_back(9);

    vector<int>::iterator it;
    it = find(v1.begin(), v1.end(), 5);
    cout<<*it<<endl;
}    
void main_find_if(){
    vector<int> v1;

    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);
    v1.push_back(9);

    vector<int>::iterator it;
    it = find_if(v1.begin(), v1.end(), GreatThree); //返回的是第一個回調函數所指向的迭代器;
    cout<<*it<<endl;
}
int main(void){
    main_adjacent_find();   //查找第一個重復的元素;
    main_binary_search();  //二分法查找某一個元素;
    main_count();  //查找某一個元素出現的次數; 針對基礎數據類型
    main_count_if(); //用一個一元謂詞,可以查找大于某一個數字的個數; 針對自定義的數據類型
    main_find();  //查找某一數據,通過迭代器指出; 針對基礎數據類型
    main_find_if();  //查找某一數據,通過迭代器指出; 針對自定義數據類型;

    return 0;
}

(2)、運行結果:

STL查找、排序、替換、集合算法


2、STL排序算法

(1)、代碼如下:

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;

//排序算法
void printV(vector<int> &v){
    vector<int>::iterator it; 

    for(it = v.begin(); it != v.end(); it++){
        cout<<*it<<" ";
    }   
    cout<<endl;
}

void main_merge(){
    vector<int> v1; 
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);

    vector<int> v2; 
    v2.push_back(2);
    v2.push_back(4);
    v2.push_back(6);

    vector<int> v3;
    v3.resize(v1.size() + v2.size());
    merge(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin());

    printV(v3);
}

class Student{
    public:
        Student(string name, int id){
            m_name = name;
            m_id = id;
        }
    public:
        string m_name;
        int m_id;
};

bool Compare(Student s1, Student s2){
    return (s1.m_id < s2.m_id);
}

void main_sort(){
    Student s1("老大", 1);
    Student s2("老二", 2);    
    Student s3("老三", 3);
    Student s4("老四", 4);

    vector<Student> v1;
    v1.push_back(s4);
    v1.push_back(s1);
    v1.push_back(s3);
    v1.push_back(s2);

    vector<Student>::iterator it;
    for(it = v1.begin(); it != v1.end(); it++){
        cout<<it->m_id<<"\t"<<it->m_name<<endl;
    }

    //sort()要對自定義的數據類型進行排序,就的進行自定義數據類型的排序;
    sort(v1.begin(), v1.end(), Compare); //Compare就是謂詞,謂詞就是函數名稱,返回值為bool類型;

    for(it = v1.begin(); it != v1.end(); it++){
        cout<<it->m_id<<"\t"<<it->m_name<<endl;
    }
}

void main_random_shuffle(){
    vector<int> v1;    
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);

    //對動態數組進行隨機打亂
    random_shuffle(v1.begin(), v1.end());

    printV(v1);

    //對字符串隨機的打亂順序;
    string str = "abcdefg";
    random_shuffle(str.begin(), str.end());;
    cout<<"str:"<<str<<endl;
}

void main_reverse(){
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);
    v1.push_back(7);

    reverse(v1.begin(), v1.end());
    printV(v1);  
}

int main(void){
    main_merge(); //歸并排序
    main_sort();
    main_random_shuffle();
    main_reverse();

    return 0;
}

(2)、運行結果:

STL查找、排序、替換、集合算法


3、STL拷貝替換

(1)、代碼如下:

#include<iostream>
#include<numeric> //accumulate()函數的頭文件;
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;

//拷貝替換

void printV(vector<int> &v){
    vector<int>::iterator it;

    for(it = v.begin(); it != v.end(); it++){
        cout<<*it<<" ";
    }
    cout<<endl;
}

void main_copy(){
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);

    vector<int> v2; 
    v2.resize(v1.size());  //調整容器大小的函數;

    copy(v1.begin(), v1.end(), v2.begin());  //拷貝容器函數;

    printV(v2);

}

void main_replace(){
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(3);
    v1.push_back(3);
    v1.push_back(5);

    replace(v1.begin(), v1.end(), 3, 8);  //替換函數,將前面的數據都用后面的數據替換;
    printV(v1);
}

bool great_equal(int &n){
    if(n >= 5){
        return true;
    }else{
        return false;
    }
}    
void main_replace_if(){
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(8);
    v1.push_back(8);
    v1.push_back(8);
    v1.push_back(5);

    replace_if(v1.begin(), v1.end(), great_equal, 1);   //這里就是可以替換范圍內的數據,通過謂詞進行控>
制!!,將great_equal范圍內的數字(返回值為真的)進行替換!!!
    printV(v1);
}

void main_swap(){
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);

    vector<int> v2;
    v2.push_back(2);
    v2.push_back(4);
    v2.push_back(6);

    swap(v1, v2);  //交換了v1、v2容器中的內容!!!
    printV(v1);
}

void main_accumulate(){
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);

    int tmp = accumulate(v1.begin(), v1.end(), 100);  //求和函數,加上一個初始值100;
    cout<<tmp<<endl;

}

void main_fill(){
    vector<int> v1;
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);

    fill(v1.begin(), v1.end(), 8);  //將容器中的數值全都改為8;
    printV(v1);
}
int main(void){
    main_copy();  //拷貝
    main_replace();  //替換 基礎數據類型
    main_replace_if();  //替換范圍 自定義數據類型
    main_swap();  //交換容器中的內容
    main_accumulate(); //求和函數
    main_fill();


    return 0;
}

(2)、運行結果:

STL查找、排序、替換、集合算法


4、STL集合算法

(1)、代碼如下:

#include<iostream>
#include<algorithm>
#include<functional>
#include<vector>
using namespace std;

void printV(vector<int> &v){
    vector<int>::iterator it; 

    for(it = v.begin(); it != v.end(); it++){
        cout<<*it<<" ";
    }   
    cout<<endl;
}
//集合
int main(void){
    vector<int> v1; 
    v1.push_back(1);
    v1.push_back(3);
    v1.push_back(5);

    vector<int> v2; 
    v2.push_back(1);
    v2.push_back(1);
    v2.push_back(1);
    vector<int> v3; 
    v3.resize(v1.size() + v2.size());
    set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), v3.begin()); //集合中取并集;沒有填滿的空間默,認為0;
    printV(v3);

    return 0;
}


(2)、運行結果:

STL查找、排序、替換、集合算法





向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女