STL之容器小结

一、理论提高:所有容器提供的都是值(value)语意,而非引用(reference)语意。容器执行插入元素的操作时,内部实施拷贝动作。所以STL容器内存储的元素必须能够被拷贝(必须提供拷贝构造函数)。

#define _CRT_SECURE_NO_WARNINGS#include <iostream>
using namespace std;
#include "vector"class Teacher
{
public:Teacher(char *name, int age){m_pname = new char[strlen(name) + 1];strcpy(m_pname, name);m_age = age;}~Teacher(){if (m_pname != NULL){delete[] m_pname;m_pname = NULL;m_age = 0;}}//Teacher t2 = t1;Teacher(const Teacher &obj){m_pname = new char[strlen(obj.m_pname)+1];strcpy(m_pname, obj.m_pname);m_age = obj.m_age;}//重载 =号操作符//t3 = t2 = t1Teacher& operator=(const Teacher &obj){//先把t2的旧的内存释放掉if (m_pname != NULL){delete[] m_pname;m_pname = NULL;m_age = 0;}//根据t1的大小分配内存 m_pname = new char[strlen(obj.m_pname) +1 ];//copy t1的数据strcpy(m_pname, obj.m_pname);m_age = obj.m_age;return *this;}public:void printT(){cout << m_pname << "\t" << m_age << endl;}
protected:
private:char    *m_pname;int     m_age;
};void main1301()
{Teacher t1("t1", 31);t1.printT();vector<Teacher> v1;v1.push_back(t1); //把t1拷贝了一份 存入到容器中了....}
void main()
{main1301();cout<<"hello..."<<endl;system("pause");return ;
}

二、除了queue与stack外,每个容器都提供可返回迭代器的函数,运用返回的迭代器就可以访问元素。

三、通常STL不会丢出异常。要求使用者确保传入正确的参数。

四、每个容器都提供了一个默认构造函数跟一个默认拷贝构造函数。
如已有容器vecIntA。

vector<int> vecIntB(vecIntA); //调用拷贝构造函数,复制vecIntA到vecIntB中。

五、与大小相关的操作方法(c代表容器):

c.size();   //返回容器中元素的个数
c.empty();   //判断容器是否为空

六、比较操作(c1,c2代表容器):

c1 == c2     判断c1是否等于c2
c1 != c2      判断c1是否不等于c2
c1 = c2        把c2的所有元素指派给c1

七、deque的使用场景
比如排队购票系统,对排队者的存储可以采用deque,支持头端的快速移除,尾端的快速添加。如果采用vector,则头端移除时,会移动大量的数据,速度慢。

vector与deque的比较:
  (1) vector.at()比deque.at()效率高,比如vector.at(0)是固定的,deque的开始位置却是不固定的。
  (2) 如果有大量释放操作的话,vector花的时间更少,这跟二者的内部实现有关。
  (3) deque支持头部的快速插入与快速移除,这是deque的优点。

八、list的使用场景
比如公交车乘客的存储,随时可能有乘客下车,支持频繁的不确实位置元素的移除插入。

九、set的使用场景
比如对手机游戏的个人得分记录的存储,存储要求从高分到低分的顺序排列。

十、map的使用场景
比如按ID号存储十万个用户,想要快速要通过ID查找对应的用户。二叉树的查找效率,这时就体现出来了。如果是vector容器,最坏的情况下可能要遍历完整个容器才能找到该用户。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超车

概念 超车&#xff0c;即车辆经过另一辆车的侧面&#xff0c;从后面超过前面同方向行驶的车辆。用于超车的车道一般为内侧车道&#xff0c;即较接近道路中心而离路肩较远的车道。在靠右行驶的地区&#xff0c;超车道为靠左的车道;在靠左行驶的地区&#xff0c;超车道为靠右的…

STL之函数对象和谓词

1.函数对象 重载函数调用操作符的类&#xff0c;其对象常称为函数对象&#xff08;function object&#xff09;&#xff0c;即它们是行为类似函数的对象。一个类对象&#xff0c;表现出一个函数的特征&#xff0c;就是通过“对象名(参数列表)”的方式使用一个类对象&#xff…

安装 Git ( Windows、linux、Mac)

安装 Git 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 是时候动手尝试下 Git 了&#xff0c;不过得先安装好它。有许多种安装方式&#xff0c;主要分为两种&#xff0c;一种是通过编…

会车

概念 会车&#xff0c;即反向行驶的列车、汽车等同时在某一地点交错通过。 会车攻略 一看&#xff0c;看对向来车的车型、速度和装载情况&#xff0c;前方道路的宽度、坚实情况&#xff0c;路旁行人、车辆情况&#xff0c;路旁停车以及障碍物情况等; 二算&#xff0c;…

FormsAuthenticationTicket基于forms的验证

构建基于forms的验证机制过程如下&#xff1a; 1,设置IIS为可匿名访问和asp.net web.config中设置为form验证 2,检索数据存储验证用户&#xff0c;并检索角色(如果不是基于角色可不用) 3,使用FormsAuthenticationTicket创建一个Cookie并回发到客户端&#xff0c;并存储 角色到票…

通过公共汽车站

要求 通过班车站&#xff0c;应降低速度慢行&#xff0c;挂一挡通过&#xff0c;注意左右仔细查看。操作方法 1、减速慢行&#xff0c;注意观察公共汽车周围的交通情况&#xff0c;以防突然情况的出现; 2、在超越公共汽车时&#xff0c;注意提防公共汽车起步后突然向左转…

STL之函数适配器

1.理论知识 2.常用函数适配器 标准库提供一组函数适配器&#xff0c;用来特殊化或者扩展一元和二元函数对象。常用适配器是&#xff1a; 1绑定器&#xff08;binder&#xff09;: binder通过把二元函数对象的一个实参绑定到一个特殊的值上&#xff0c;将其转换成一元函数对象…

真正理解 git fetch, git pull 以及 FETCH_HEAD

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 真正理解 git fetch, git pull 要讲清楚git fetch&#xff0c;git pull,必须要附加讲清楚git remote&#xff0c;git merge 、远程rep…

pyqt5 + pyinstaller 制作爬虫小程序

环境:mac python3.7 pyqt5 pyinstaller ps: 主要是熟悉pyqt5, 加入了单选框 输入框 文本框 文件夹选择框及日历下拉框 效果图: pyqt5 主程序文件 # -*- coding: utf-8 -*- # Author: Mehaei # Date: 2019-07-10 13:02:56 # Last Modified by: Mehaei # Last Modified time…

通过学校区域

通过学校区域的要求 应观察前后左右的交通情况&#xff0c;适时减速慢行&#xff0c;不得鸣喇叭和与学生抢行。 操作方法 当驾驶车辆行至学校附近或有注意儿童标志路段时&#xff0c;一定要及时减速&#xff0c;注意观察道路两侧或周围的情况&#xff0c;时刻堤防学生横…

axios中出现两次请求,OPTIONS请求和GET请求

在项目中发现ajax中出现两次请求&#xff0c;OPTIONS请求和GET请求 查看到浏览器NetWork有两次请求&#xff0c;请求url一样&#xff1a; 查找原因是浏览器对简单跨域请求和复杂跨域请求的处理区别。 XMLHttpRequest会遵守同源策略(same-origin policy). 也即脚本只能访问相同协…

笔试面试收获(持续更新中)

1. Internet 是有ARPANET发展而来 2. NFS&#xff08;Network File System&#xff09;即网络文件系统 3. OSI参考模型七层&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff08;IP,路由器&#xff0c;三层交换机&#xff09;&#xff0c;传输层&#xff…

Linux 安装 配置 Maven

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.需要提前安装JDK&#xff0c;并且配置环境变量 请参考&#xff1a;https://blog.csdn.net/jiangyu1013/article/details/84321146 2.…

Threading in C#

这里推荐一些C#编程多线程的学习资料&#xff1a; http://knowledge.swanky.wu.googlepages.com/threading_in_c_sharp.html Ebook in English&#xff1a;http://cid-068f7d75d8585700.skydrive.live.com/self.aspx/ebook/threading.pdf 一些demo&#xff1a;http://cid-068f7…

经理人如何与这“六种人”打交道?

在职场中&#xff0c;我们要与不同身份、不同年龄、不同岗位、不同性别、不同性格的人打交道。在平时的实际工作接触中&#xff0c;善于与不同人打交道的经理人&#xff0c;会根据不同的情况用不同的态度和方式来对待之。 1、如何与死板的人打交道 与这样的人交往&#xff0c…

[Git高级教程 (一)] 通过 Tag 标签回退版本修复 bug

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1 前言 本系列之所以取名”Git高级教程”&#xff0c;主要是教大家解决实际工作中遇到的问题&#xff0c;要求读者会基本的Git用法和命令…

Javascript 自定义输出

缘由 前段时间再看了一些javascript的学习资料,也写的一些demo,在输出的时候一般都用alert,但这个方法会打断函数运行,用起来不是很好.还有就是console.log这个方法,这种方法原来一直以为只能在FireFox上面才能用,现在才发现主流浏览器都支持.但我的这个插件已经写的差不多了,所…

不要打2岁内和6岁后的孩子 父母必看

一位妈妈说&#xff1a;“孩子经常无理取闹&#xff0c;到超市就要买这买那&#xff0c;不给买就坐在地上哭闹。到别人家去就乱翻乱动&#xff0c;还会到人家沙发上乱蹦&#xff0c;无论你怎么说&#xff0c;孩子都不听话。每次我都会气不打一处来&#xff0c;回到家就痛打一顿…

设计模式之开放封闭原则

以下皆是个人理解如有不对请留言指出&#xff0c;谢谢&#xff01; 我就代码提出我自己个人的看法&#xff1a; 正常定义一个类例如银行工作员&#xff0c;他可以执行存款&#xff0c;付款和转账功能&#xff0c;如果在现有功能上我想添加贷款功能&#xff0c;需要在类中添加…

[Git高级教程(二)] 远程仓库版本回退方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况&#xff0c;于是做了一下研究&#xff0c;写下这篇博客。 2 问题 如果提交了…