日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL初级

發布時間:2024/9/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL初级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

產生原因

C++的目的是復用性的提升,為了避免開發者重復簡單工作,誕生了標準模板庫(STL)

一、STL實現

利用模板技術

容器與算法間由迭代器銜接

二、STL六大組件

分別是:容器、算法、迭代器、仿函數、適配器(配接器)、空間配置器

  • 容器:各種數據結構,如vector、list、deque、set、map等,用來存放數據。將數據結構實現出來。分為序列式容器(強調排序,元素有固定位置)和關聯式容器(二叉樹結構,無物理順序結構)
  • 算法(Algorithms):各種常用的算法,如sort、find、copy、for_each等。分為質變算法和非質變算法(根據元素是否改變)
  • 迭代器:扮演了容器與算法之間的膠合劑。看作指針(雙向、隨機訪問)
  • 仿函數:行為類似函數,可作為算法的某種策略。
  • 適配器:一種用來修飾容器或者仿函數或迭代器接口的東西。
  • 空間配置器:負責空間的配置與管理。
  • 三、STL舉例實踐

    容器:?vector

    算法:?for_each

    迭代器:?vector<int>::iterator

    1.存放int數據

    #include <vector> #include <algorithm>void MyPrint(int val) {cout << val << endl; }void test01() {//創建int類型的vector容器對象vector<int> v;//向容器中尾插放數據v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);//迭代器是用來遍歷容器中的元素//v.begin()返回迭代器,這個迭代器指向容器中第一個數據//v.end()返回迭代器,這個迭代器指向容器元素的最后一個元素的下一個位置//vector<int>::iterator 拿到vector<int>這種容器的迭代器類型//*it相當于解引用vector<int>::iterator pBegin = v.begin();vector<int>::iterator pEnd = v.end();//while遍歷方式:while (pBegin != pEnd) {cout << *pBegin << endl;pBegin++;}//for遍歷方式:for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << endl;}cout << endl;//算法遍歷方式://使用STL提供標準遍歷算法 ?頭文件 algorithmfor_each(v.begin(), v.end(), MyPrint);//Myprint函數名 }int main() {test01();system("pause");return 0; }


    2.存放自定義數據

    #include <vector>
    #include <string>

    //class自定義數據類型
    class Person {
    public:
    ?? ?Person(string name, int age) {
    ?? ??? ?mName = name;
    ?? ??? ?mAge = age;
    ?? ?}
    public:
    ?? ?string mName;
    ?? ?int mAge;
    };

    void test01() {

    ?? ?vector<Person> v;


    ?? ?Person p1("aaa", 10);
    ?? ?Person p2("bbb", 20);
    ?? ?Person p3("ccc", 30);
    ?? ?Person p4("ddd", 40);
    ?? ?Person p5("eee", 50);

    ?? ?v.push_back(p1);
    ?? ?v.push_back(p2);
    ?? ?v.push_back(p3);
    ?? ?v.push_back(p4);
    ?? ?v.push_back(p5);

    ?? ?for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
    ?? ??? ?cout << "Name:" << (*it).mName << " Age:" << (*it).mAge << endl;

    ?? ?}
    }


    //放對象指針
    void test02() {

    ?? ?vector<Person*> v;

    ?? ?//創建數據
    ?? ?Person p1("aaa", 10);
    ?? ?Person p2("bbb", 20);
    ?? ?Person p3("ccc", 30);
    ?? ?Person p4("ddd", 40);
    ?? ?Person p5("eee", 50);

    ? ? //存放地址

    ? ? v.push_back(&p1);
    ?? ?v.push_back(&p2);
    ?? ?v.push_back(&p3);
    ?? ?v.push_back(&p4);
    ?? ?v.push_back(&p5);

    ?? ?for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++) {
    ?? ??? ?Person * p = (*it);
    ?? ??? ?cout << "Name:" << p->mName << " Age:" << (*it)->mAge << endl;
    ?? ?}
    }


    int main() {

    ?? ?test01();
    ? ??
    ?? ?test02();

    ?? ?system("pause");

    ?? ?return 0;
    }
    ?

    總結

    了解STL的基本知識,運作原理

    總結

    以上是生活随笔為你收集整理的STL初级的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。