STL-vector

環(huán)境:ide:Mac+clion

視頻鏈接:
https://www.bilibili.com/video/BV1Hb411Y7E5?p=5

STL(Standard Template Library) 標(biāo)準(zhǔn)類庫(kù),用來提升代碼的復(fù)用性

1.STL 基本上所有的代碼都采用了模版類或者模版函數(shù)。
2.STL從廣義上來分:容器(container)/算法(algorithm)/迭代器(iterator)
3.STL 的六大組件:容器/算法/迭代器/仿函數(shù)/適配器(配接器)/空間配置器

容器:list vector set map deque 來存放數(shù)據(jù)
算法:sort find for_each copy 等
迭代器:容器和算法的膠合劑。
仿函數(shù):類似函數(shù)使用。用于算法的某種策略。
適配器:用來修飾容器或者迭代器或仿函數(shù)接口的東西。
空間配置器:負(fù)責(zé)空間配置和管理。

接觸第一個(gè)容器:vector,操作內(nèi)置數(shù)據(jù)類型/自定義數(shù)據(jù)類型和自定義數(shù)據(jù)類型的指針.如下代碼中,介紹了vector 插入,遍歷。
注意在vector<> 的尖括號(hào)中,*it 就是<>中的內(nèi)容。

#include<vector>
#include<algorithm>
//vector 容器來存放內(nèi)置的數(shù)據(jù)類型

void myPrint(int val) {
    cout << val << endl;
}

void test() {
    vector<int> vectorC;//這里定義了的vector
    vectorC.push_back(5); //插入數(shù)據(jù)
    vectorC.push_back(4);
    vectorC.push_back(6);
    vectorC.push_back(2);
    vectorC.push_back(1);

    //遍歷打印輸出:
    //第一種方式:
    vector<int>::iterator first = vectorC.begin();//指向的是vector的第一個(gè)元素。
    vector<int>::iterator end = vectorC.end();//指向最后一個(gè)元素的下一個(gè)元素。
    for_each(first, end, myPrint);//注意最后的這個(gè)函數(shù)是回調(diào)。 輸出 5 4 6 2 1
    cout << "-----------------------------------" << endl;
    while (first != end) {
        cout << *first << endl;
        first++;
    }// 輸出 5 4 6 2 1
    cout << "-----------------------------------" << endl;
    //第二種方式,也是我們經(jīng)常用到的方式:
    for (vector<int>::iterator it = vectorC.begin(); it != vectorC.end(); it++) {
        cout << *it << endl;// 輸出 5 4 6 2 1
    }

}

//vector 放自定義數(shù)據(jù)類型。
class Person {
public:
    Person() {

    }

    Person(string name, int age) : m_Name(name), m_Age(age) {
    }

    string m_Name;
    int m_Age;
};

void printPerson(Person p) {
    cout << "姓名:" << p.m_Name << " \t 年齡:" << p.m_Age << endl;
}

//容器中保存自定義對(duì)象
void test1() {
    Person person1("sheik1", 10);
    Person person2("sheik2", 20);
    Person person3("sheik3", 30);
    Person person4("sheik4", 40);
    Person person5("sheik5", 50);
    vector<Person> personVector;
    personVector.push_back(person1);
    personVector.push_back(person2);
    personVector.push_back(person3);
    personVector.push_back(person4);
    personVector.push_back(person5);

    for (vector<Person>::iterator it = personVector.begin(); it != personVector.end(); it++) {
        cout << "姓名:" << it->m_Name << " \t 年齡:" << it->m_Age << endl;
    }

    for_each(personVector.begin(), personVector.end(), printPerson);

}

//容器中保存指針
void test2() {
    Person person1("sheik1", 10);
    Person person2("sheik2", 20);
    Person person3("sheik3", 30);
    Person person4("sheik4", 40);
    Person person5("sheik5", 50);
    vector<Person *> personVector;
    personVector.push_back(&person1);
    personVector.push_back(&person2);
    personVector.push_back(&person3);
    personVector.push_back(&person4);
    personVector.push_back(&person5);

    for (vector<Person *>::iterator it = personVector.begin(); it != personVector.end(); it++) {
        cout << "姓名:" << (*it)->m_Name << " \t 年齡:" << (*it)->m_Age << endl;
    }
}

int main() {
//    test();
//    test1();
    test2();
    return 0;
}

Vector 嵌套vector事例:

int main(){

    vector<vector<int>> vecInVector;
    vector<int> v1;
    vector<int> v2;
    vector<int> v3;
    vector<int> v4;
    for (int i=1;i<5;i++){//這里放了四個(gè)數(shù)據(jù)。
        v1.push_back(i);
        v2.push_back(i+1);
        v3.push_back(i+2);
        v4.push_back(i+3);
    }
    vecInVector.push_back(v1);
    vecInVector.push_back(v2);
    vecInVector.push_back(v3);
    vecInVector.push_back(v4);

    for (vector<vector<int>>::iterator it = vecInVector.begin(); it != vecInVector.end();it++){
        for (vector<int>::iterator inIt = (*it).begin();inIt != (*it).end();inIt++){
            cout << *inIt<<" ";
        }
        cout <<endl;
    }
// 輸出結(jié)果如下:
//    1 2 3 4
//    2 3 4 5
//    3 4 5 6
//    4 5 6 7

    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 容器 在實(shí)際的開發(fā)過程中, 數(shù)據(jù)結(jié)構(gòu)本身的重要性不會(huì)遜于操作于數(shù)據(jù)結(jié)構(gòu)的算法的重要性, 當(dāng)程序中存在著對(duì)時(shí)間要求很...
    編程小兔崽閱讀 1,181評(píng)論 0 1
  • STL的誕生 長(zhǎng)久以來,軟件界一直希望建立一種可以重復(fù)利用的東西。例如C++的面向?qū)ο蟮木幊趟枷刖褪窃谔岣邚?fù)用性。...
    殷超鋒閱讀 81評(píng)論 0 0
  • 1. STL概述 STL的一個(gè)重要特點(diǎn)是數(shù)據(jù)結(jié)構(gòu)和算法的分離。盡管這是個(gè)簡(jiǎn)單的概念,但這種分離確實(shí)使得STL變得非...
    bilinbilin閱讀 518評(píng)論 0 2
  • 1. STL概述 STL的一個(gè)重要特點(diǎn)是數(shù)據(jù)結(jié)構(gòu)和算法的分離。盡管這是個(gè)簡(jiǎn)單的概念,但這種分離確實(shí)使得STL變得非...
    長(zhǎng)江小楊閱讀 477評(píng)論 0 0
  • 原文鏈接:http://net.pku.edu.cn/~yhf/UsingSTL.htm 三十分鐘掌握STL這是本...
    Transnet2014閱讀 1,133評(píng)論 0 10

友情鏈接更多精彩內(nèi)容