ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

STL初级

2021-06-19 15:04:25  阅读:158  来源: 互联网

标签:容器 迭代 STL back Person 初级 vector push


 

产生原因

C++的目的是复用性的提升,为了避免开发者重复简单工作,诞生了标准模板库(STL)

一、STL实现

利用模板技术

容器与算法间由迭代器衔接

二、STL六大组件

分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

  1. 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。将数据结构实现出来。分为序列式容器(强调排序,元素有固定位置)和关联式容器(二叉树结构,无物理顺序结构)
  2. 算法(Algorithms):各种常用的算法,如sort、find、copy、for_each等。分为质变算法和非质变算法(根据元素是否改变)
  3. 迭代器:扮演了容器与算法之间的胶合剂。看作指针(双向、随机访问)
  4. 仿函数:行为类似函数,可作为算法的某种策略。
  5. 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
  6. 空间配置器:负责空间的配置与管理。

三、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提供标准遍历算法  头文件 algorithm
    for_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,back,Person,初级,vector,push
来源: https://blog.csdn.net/qq_53169429/article/details/118052776

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有