学习STL中遇到的问题

学习STL中遇到的问题

一, vector

  1. vector对象用数组方式访问时,不会自动扩张,只能访问已有的元素。
    例如下面的代码就是错误的:
#include <vector>
#include <iostream>
int main()
{
	vector<int> test;
	test[0] = 2;
	return 0;
}

二,set

  1. set集合的迭代器遍历,用set集合的迭代器的时候是没有办法比较大小的,例如下面的代码是错误的,
#include <set>
#include <iostream>
int main()
{
	set<int> s;
	s.insert(8);
	s.insert(1);
	s.insert(3);
	set<int>::iterator it;
	for(it=s.begin();it<s.end();it++)//这里it<s.end()会报错
		cout<<*it<<" ";
	cout<<endl;
	return 0;
}
  1. 元素反向遍历
    需要使用reverse_iterator迭代器
#include <iostream>
#include <set>
using namespace std;
int main()
{
    set<int> s;
    s.insert(8);
    s.insert(1);
    s.insert(12);
    s.insert(6);
    s.insert(8);
    set<int>::iterator it;
    for(it=s.begin();it!=s.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    set<int>::reverse_iterator rit;
    for(rit=s.rbegin();rit!=s.rend();rit++)
        cout<<*rit<<" ";
    cout<<endl;
    return 0;
}

三、map

  1. map元素的插入
    map元素可以直接用数组的方式插入新元素,例子如下:
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
    map<int,int> m;
    m[1] = 4;
    m[2] = 3;
    m[3] = 2;
    m[4] = 1;
    map<int,int>::iterator it;
    for(it=m.begin();it!=m.end();it++)
        cout<<(*it).first<<" : "<<(*it).second<<endl;
    return 0;
}

四、deque双端队列

  1. 从头部插入元素以及从中间插入元素
    从《ACM程序设计(第2版)》一书中看到对deque的介绍,说push_front和insert两个函数都不会增加新元素,只会将原有的元素覆盖,但是实际测试时却不是这样,在分别调用这两个函数之后,发现数组的元素时增加了的。实验的源代码如下:
#include <iostream>
#include <map>
#include <string>
#include <deque>
using namespace std;
int main()
{
    deque<int> d;
      int i;
    d.push_back(1);
    d.push_back(2);
    d.push_back(3);
    for(i=0;i<d.size();i++)
    {
        cout<<d[i]<<" ";
    }
    cout<<endl;
    d.push_front(10);
    d.push_front(20);
    for(i=0;i<d.size();i++)
    {
        cout<<d[i]<<" ";
    }
    cout<<endl;
    d.insert(d.begin()+1,88);

    for(i=0;i<d.size();i++)
    {
        cout<<d[i]<<" ";
    }
    cout<<endl;
    return 0;
}

五、list

  1. 迭代器只能进行&quot;++&quot;&quot;++&quot;"++"或者&quot;−−&quot;&quot;--&quot;""操作,不能进行+n+n+n或者−n-nn的操作,此处用insert()方法举例:
#include <iostream>
#include <list>
using namespace std;
int main()
{
    list<int> li;
    li.push_back(2);
    li.push_back(1);
    li.push_back(5);
    li.push_front(8);
    list<int>::iterator it;
    it=li.begin();
    li.insert(it++,20); //这样不会报错
    //li.insert(it+2,20);  //错误的写法
    it++;
    for(it=li.begin();it!=li.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    return 0;
}
  1. sort函数与find函数
    在c++的list集合里,对list集合的元素排序的时候不是像其他元素一样调用algorithm头文件的sort函数,而是调用list自己的sort函数,而find相反,list自己没有find函数,需要调用algorithm头文件的find函数。具体实例代码如下:
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
int main()
{
    list<int> li;
    li.push_back(2);
    li.push_back(1);
    li.push_back(5);
    li.push_front(8);
    li.push_front(2);
    list<int>::iterator it;
    it=li.begin();
    li.insert(it++,20);
    it++;
    for(it=li.begin();it!=li.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    li.sort();
    //sort(li.begin(),li.end());这是错误的方式
    for(it=li.begin();it!=li.end();it++)
        cout<<*it<<" ";
    cout<<endl;
    it = find(li.begin(),li.end(),2);
    //li.find(2);  错误的方式
    if(it!=li.end())
        cout<<*it<<endl;
    else
        cout<<"no found it"<<endl;
    return 0;
}

六、priority_queue

  1. 通过重载&quot;()&quot;&quot;()&quot;"()"操作符来定义优先级,通过这种方式进行比较的优先队列初始化时需要传三个参数,分别是:元素类型,内部结构,比较函数。实例如下:
#include <iostream>
#include <queue>
using namespace std;
struct myComp
{
    bool operator()(const int &a,const int &b)
    {
        return a>b;
    }
};
int main()
{
	//在这里myComp必须在第三个参数传入,所以需要把第二个参数也写上,第二个参数代表的是内部结构
    priority_queue<int,vector<int>,myComp> pq2;
    pq2.push(1);
    pq2.push(9);
    pq2.push(2);
    pq2.push(30);
    while(pq2.empty()!=true)
    {
        cout<<pq2.top()<<" ";
        pq2.pop();
    }
    cout<<endl;
    return 0;
}

标题基于SpringBoot的马术俱乐部管理系统设计与实现AI更换标题第1章引言介绍马术俱乐部管理系统的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义阐述马术俱乐部管理系统对提升俱乐部管理效率的重要性。1.2国内外研究现状分析国内外马术俱乐部管理系统的发展现状及存在的问题。1.3研究方法以及创新点概述本文采用的研究方法,包括SpringBoot框架的应用,以及系统的创新点。第2章相关理论总结和评述与马术俱乐部管理系统相关的现有理论。2.1SpringBoot框架理论介绍SpringBoot框架的基本原理、特点及其在Web开发中的应用。2.2数据库设计理论阐述数据库设计的基本原则、方法以及在管理系统中的应用。2.3马术俱乐部管理理论概述马术俱乐部管理的基本理论,包括会员管理、课程安排等。第3章系统设计详细描述马术俱乐部管理系统的设计方案,包括架构设计、功能模块设计等。3.1系统架构设计给出系统的整体架构,包括前端、后端和数据库的交互方式。3.2功能模块设计详细介绍系统的各个功能模块,如会员管理、课程管理、预约管理等。3.3数据库设计阐述数据库的设计方案,包括表结构、字段设计以及数据关系。第4章系统实现介绍马术俱乐部管理系统的实现过程,包括开发环境、编码实现等。4.1开发环境搭建介绍系统开发所需的环境,包括操作系统、开发工具等。4.2编码实现详细介绍系统各个功能模块的编码实现过程。4.3系统测试与调试阐述系统的测试方法、测试用例以及调试过程。第5章系统应用与分析呈现马术俱乐部管理系统的应用效果,并进行性能分析。5.1系统应用情况介绍系统在马术俱乐部中的实际应用情况。5.2系统性能分析从响应时间、并发处理能力等方面对系统性能进行分析。5.3用户反馈与改进收集用户反馈,提出系统改进建议。第6章结论与展望总结马术俱乐部管理系统的设计与实现成果,并展望未来的研究
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值