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<int>::iterator

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

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

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

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

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

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

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

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>//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<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<<"姓名: "<<(*it).m_Name<<"年龄:"<< (*it).m_Age << endl;

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

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

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

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>//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<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 <<"姓名: "<<(*it)->m_Name <<"年龄: "<<(*it)->m_Age << endl;
    }
}
int main()
{    test03();
    return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华梦天下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值