STL容器板子(vector篇)

一.STL的诞生

(1)长久以来,软件界一直希望建立一种可重复利用的东西

(2)C++的面向对象和泛型编程思想,日的就是复用性的提升

(3)大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作

(4)为了建立数据结构和算法的—套标准,诞生了STL

二.STL基本概念

STL(Standard Template Library,标准模板库)

STL从广义上分为:容器(container)、算法(algorithm)、迭代器(iterator)容器和算法之间通过迭代器进行无缝连接。

STL几乎所有的代码都采用了模板类或者模板函数

三.STL六大组件

STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器

1.容器:各种数据结构,如vector、list、 deque、set、map等,用来存放数据。

2.算法:各种常用的算法,如sort、 find、copy、 for_each等

3.迭代器:扮演了容器与算法之间的胶合剂。

4.仿函数:行为类似函数。可作为敢法的某种策略。

5.适配器:—种用来修饰容器或者仿函数或迭代器接口的东西。

6.空间配置器:负责空间的配置与管理。

以下是对C++中STL中vector容器的整理:

———————————————(分割线)———————————————————

Vector:

一.vector存放内置数据类型

容器:vector

算法:for_each

迭代器: vector::iterator

#include
using namespace std;
#include

#include
//vector存放内置数据类型

void test01()
{    
    //创建了一个vector容器,数组
    vector v; 
    
    //向容器中插入数据,用push_back函数 
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);
    
    //通过迭代器来访问容器中的数据
    vector::iterator  itBegin=v.begin();//起始迭代器,指向第一个元素 
    vector::iterator  itEnd=v.end();//结束迭代器,指向容器中最后一个元素的下一个位置!!!!!(不是最后一个位置)
    
    //第一种遍历方式(while循环)
    while(itBegin!=itEnd)
    {    printf("%d\n",*itBegin);//迭代器可以看作指针,不能漏掉“*”
        itBegin++;
    }
 } 
int main()
{    test01();
    return 0;
}

//第二种遍历方式(for循环)
int main()
{    for(vector::iterator it=v.begin();it!=v.end();it++) 
    {    printf("%d\n",*it);
    }
    return 0;
}

//第三种遍历方法   利用STL提供的遍历算法(由于系统不认识for_each,所以要加上头文件#include(标准算法头文件))

void fun(int i )
{
    printf("%d\n",i);
}
 
int main()
{
    int a[] = { 1, 2, 3, 4};
    vector v(a, a+sizeof(a)/sizeof(int));
    for_each(v.begin(), v.end(), fun);//for_each和一个输出函数配套使用
}

二:vector中存放自定义数据类型

#include
#include
#include
#include//Person属于字符串类型,需要string头文件 
using namespace std; 

class Person
{    
public:
    Person(string name,int age)    
    {    this->m_Name=name;
        this->m_Age=age;
    }
public:
    string m_Name;
    int m_Age;
};
void test02()
{    
    vector 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::iterator it=v.begin();it!=v.end();it++)
    {    cout<<"姓名: "<<(*it).m_Name<<"年龄:"<< (*it).m_Age << endl;

        //cout<<"姓名: "<m_Name<<"年龄:"<< it->m_Age << endl;
    }

int main()
{    test02();
    return 0;
}

指针类型与上述自定义类型类似:

#include
#include
#include
#include//Person属于字符串类型,需要string头文件 
using namespace std; 

class Person
{    
public:
    Person(string name,int age)    
    {    this->m_Name=name;
        this->m_Age=age;
    }
public:
    string m_Name;
    int m_Age;
};
void test03()
{    
    vector 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::iterator it=v.begin();it!=v.end();it++) 
    {    cout <<"姓名: "<<(*it)->m_Name <<"年龄: "<<(*it)->m_Age << endl;
    }
}
int main()
{    test03();
    return 0;
}

 

你可能感兴趣的:(容器,c++,数据结构)