STL迭代器

错误 1 error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCR

---》

项目名称右键选择"属性"-“链接器”-"系统" 找到"子系统",将其改为 “控制台 (/SUBSYSTEM:CONSOLE)”</span>

-------------------------------------------------------------------------------------------------------------------------------------------

STL:容器,迭代器,算法,仿函数,适配器,空间配置器。

原生指针(native pointer)也是一种迭代器。

迭代器是容器与算法进行无缝连接的中间桥梁。

关系:容器通过空间适配器获得空间,适配器可以修饰仿函数,仿函数协助算法通过迭代器对容器内容进行存取。

容器:序列式容器,关联式容器。

迭代器:输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机迭代器。

算法:非质变算法,质变算法。

STL的优点:

不需要安装东西,直接使用。

数据和算法分离,利用迭代器进行沟通。

高复用性,高移植,高性能。

-------------------------------------------------------------------------------------------------------------------------------------------

迭代器:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
//回调函数
void myPrint(int val){
    cout << val << endl;
}
//内置属性类型
void test01(){
    //声明一个vector的容器
    vector<int>v;
    //向容器中添加数据
    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 (itbegin != itEnd){//第一种遍历方式
        cout << *itbegin << endl;
        itbegin++;
    }
    //第二种遍历方式
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++){
        cout << *it << endl;
    }
    //第三种遍历方式,采用系统提供的算法
    for_each(v.begin(), v.end(), myPrint);//参1表示起始迭代器,参2表示结束迭代器,参3一个回调函数
}
//自定义数据类型
class Person{
public:
     Person(string name,int age){
        this->m_name = name;
        this->m_age = age;
    }

    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);
    v.push_back(p1);
    v.push_back(p2);
    v.push_back(p3);
    v.push_back(p4);
    //遍历自定义数据类型
    for (vector<Person>::iterator it = v.begin(); it != v.end(); it++){
        //*it表示Person,it是一个指针
        cout << "姓名:"<<(*it).m_name <<"年龄:"<<it->m_age<< endl;
    }
}
//存放自定义数据类型的指针
void test03(){
    vector<Person*>v;
    Person p1("aaa", 10);
    Person p2("bbb", 20);
    Person p3("ccc", 30);
    Person p4("ddd", 40);
    v.push_back(&p1);
    v.push_back(&p2);
    v.push_back(&p3);
    v.push_back(&p4);
    //遍历
    for (vector<Person*>::iterator it = v.begin(); it != v.end(); it++){
        //*it表示Person*
        cout << "姓名:" << (*it)->m_name << "年龄:" << (*it)->m_age << endl;
    }
}
//容器的嵌套,容器vector相当于是一个数组,嵌套的容器相当于是一个二维数组
void test04(){
    vector<vector<int>>v;
    //创建里面的小容器
    vector<int>v1;
    vector<int>v2;
    vector<int>v3;
    //往小容器里面添加数据
    for (int i = 0; i < 10; i++){
        v1.push_back(i);
        v2.push_back(i + 10);
        v3.push_back(i + 20);
    }
    //将小容器放到大容器中
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);
    //遍历容器,相当于遍历二维数组
    for (vector<vector<int>>::iterator it = v.begin(); it != v.end(); it++){
        //*it相当于vector<int>
        for (vector<int>::iterator vit = (*it).begin(); vit != (*it).end(); vit++){
            cout << *vit << " " ;
        }
        cout << endl;
    }
}
int main(){
    test01();
    test02();
    test03();
    test04();
    system("pause");
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STL(标准模板库)迭代器是一种用于访问容器元素的对象,它提供了一种统一的方式来遍历和操作容器中的元素。STL中的迭代器是用模板类实现的,它们被设计为与容器独立并提供统一的接口。 迭代器的实现需要满足以下要求: 1. 提供指向容器元素的指针操作符(*),使得可以通过迭代器访问元素。 2. 提供用于移动到容器下一个或上一个元素的算术操作符(++、--),使得可以在容器中移动迭代器。 3. 提供比较操作符(==、!=、<、>等),用于比较两个迭代器的位置关系。 具体实现上,STL迭代器可以分为以下几种类型: 1. 输入迭代器(Input Iterator):仅能从容器中读取元素,只支持单向移动。 2. 输出迭代器(Output Iterator):仅能向容器中写入元素,只支持单向移动。 3. 前向迭代器(Forward Iterator):支持从容器中读取和写入元素,支持单向移动。 4. 双向迭代器(Bidirectional Iterator):支持从容器中读取和写入元素,支持双向移动。 5. 随机访问迭代器(Random Access Iterator):支持从容器中读取和写入元素,支持任意方向的移动,并且可以进行随机访问。 在STL中,不同类型的容器提供了不同级别的迭代器支持。例如,vector和deque提供了随机访问迭代器,而list只提供了双向迭代器迭代器的实现是通过重载操作符和模板机制来实现的,以满足不同类型容器的特定需求。 总结起来,STL迭代器是一种通用的访问容器元素的对象,其实现通过模板类和操作符重载来实现不同级别的功能支持。这种设计使得STL的算法可以独立于具体容器而操作,提供了高度的灵活性和可扩展性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值