范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

有关STL应用论文

  STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称。下面是关于有关STL应用论文的内容,欢迎阅读!
  STL提供六大组件,彼此可以组合套用
  1、容器(containers):各种数据结构,如vertor,list,deque,set,map.从实现的角度来看,STL容器是一种class template
  2、算法(algorithms):各种算法如sort,search,copy,earse。STL算法是一种 function template。
  3、迭代器(iterators):扮演容器与算法之间的胶合剂,是所谓的"泛型指针"。所有STL容器都有自己的专属的迭代器。
  4、仿函数(functors):行为类似函数,可以作为算法的某些策略。从实现的角度来看,仿函数是一种重载了operator()的class或class template。
  5、配接器(adapters):一种用来修饰容器或仿函数或迭代器借口的东西。例如queue和stack
  6、配置器(allocators):负责空间的配置与管理。配置器是一个实现了动态空间分配、空间管理、空间释放的class template。
  STL是建立在泛化之上的。数组泛化为容器,参数化了所包含的对象的类型。函数泛化为算法,参数化了所用的迭代器的类型。指针泛化为迭代器,参数化了所指向的对象的类型。
  vector、string、deque和list被称为标准序列容器,
  set、multiset、map和multimap是标准关联容器。
  非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串。
  非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap。
  标准非STL容器,包括数组、bitset、valarray、stack、queue和priority_queue。
  迭代器被分成五个种类:
  输入迭代器是每个迭代位置只能被读一次的只读迭代器。
  输出迭代器是每个迭代位置只能被写一次的只写迭代器。
  输入和输出迭代器被塑造为读和写输入和输出流(例如,文件)。
  前向迭代器有输入和输出迭代器的能力,但是它们可以反复读或写一个位置。
  双向迭代器就像前向迭代器,除了它们的后退可以像前进一样容易。标准关联容器都提供双向迭代器。list也有。
  连续内存容器(也叫做基于数组的容器)在一个或多个(动态分配)的内存块中保存它们的元素。如果一个新元素被查入或者已存元素被删除,其他在同一个内存块的元素就必须向上或者向下移动来为新元素提供空间或者填充原来被删除的元素所占的空间。这种移动影响了效率和异常安全。标准的连续内存容器是vector、string和deque。非标准的rope也是连续内存容器。
  基于节点的容器在每个内存块(动态分配)中只保存一个元素。容器元素的插入或删除只影响指向节点的指针,而不是节点自己的内容。所以当有东西插入或删除时,元素值不需要移动。表现为链表的容器——比如list和slist——是基于节点的,所有的标准关联容器也是(它们的典型实现是平衡树)。非标准的散列容器使用不同的基于节点的实现。
  1、vector
  vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随机存取(即使用[]操作符访问其中的元素),但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的.拷贝(复杂度是O(n)),另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。
  vector不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。因此,vector和vector都是数据类型。
  vector对象的定义和初始化
  vectorv1;
  vector保存类型为T的对象。默认构造函数v1为空。
  vectorv2(v1);
  v2是v1的一个副本。
  vectorv3(n,i);
  v3包含n个值为i的元素。
  vectorivec4(10, -1); // 10 elements, each initialized to -1
  vectorsvec(10, "hi!"); // 10 strings, each initialized to "hi!"
  vector的操作
  v.empty()
  如果v为空,则返回true,否则返回false。
  v.size()
  返回v中元素的个数。
  v.push_back(t)
  在v的末尾增加一个值为t的元素。
  v[n]
  返回v中位置为n的元素。
  v1=v2
  把v1的元素替换为v2中元素的副本。
  v1==v2
  如果v1与v2相等,则返回true。
  !=, <, <=,>, >=
  保持这些操作符惯有的含义。
  向vector添加元素:
  复制代码 代码如下:
  string word;
  vectortext; // empty vector
  while (cin >> word) {
  text.push_back(word); // append word to text
  }
  vector的下标操作:
  for (vector::size_type ix = 0; ix != ivec.size(); ++ix)
  ivec[ix] = 0;
  vector迭代器
  每种容器都定义了一对命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,由begin返回的迭代器指向第一个元素:
  复制代码 代码如下:
  vector::iterator iter = ivec.begin();
  由end操作返回的迭代器指向vector的"末端元素的下一个"。通常称为超出末端迭代器(off-the-end iterator),表明它指向了一个不存在的元素。如果vector为空,begin返回的迭代器与end返回的迭代器相同。
  复制代码 代码如下:
  for (vector::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
  *iter = 0; // set element to which iter refers to 0
  const_iterator
  前面的程序用vector::iterator改变vector中的元素值。每种容器类型还定义了一种名为const_iterator的类型,该类型只能访问容器内元素,但不能改变其值。
  复制代码 代码如下:
  for (vector::const_iterator iter = text.begin(); iter != text.end(); ++ iter)
  *iter = " "; // error: *iter is const
  2、list
  list是由数据结构中的双向链表实现的,因此它的内存空间可以是不连续的。因此只能通过指针来进行数据的访问,这个特点使得它的随机存取变的非常没有效率,需要遍历中间的元素,搜索复杂度O(n),因此它没有提供[]操作符的重载。但由于链表的特点,它可以以很好的效率支持任意地方的删除和插入。
  list::iterator与vector::iterator的一些不同:
  复制代码 代码如下:
  #include
  #include
  #include
  using namespace std;
  int main( void )
  {
  vectorv;
  listl;
  for (int i=0; i<8; i++) //往v和l中分别添加元素
  {
  v.push_back(i);
  l.push_back(i);
  }
  cout << "v[2] = " << v[2] << endl;
  //cout << "l[2] = " << l[2] << endl; //编译错误,list没有重载[]
  cout << (v.begin() < v.end()) << endl;
  //cout << (l.begin() < l.end()) << endl; //编译错误,list::iterator没有重载<或>
  cout << *(v.begin() + 1) << endl;
  vector::iterator itv = v.begin();
  list::iterator itl = l.begin();
  itv = itv + 2;
  //itl = itl + 2; //编译错误,list::iterator没有重载+
  itl++;itl++; //list::iterator中重载了++,只能使用++进行迭代访问。
  cout << *itv << endl;
  cout << *itl << endl;
  return 0;
  }
  由于vector拥有一段连续的内存空间,能非常好的支持随机存取,因此vector::iterator支持"+"、"+="、"<"等操作符。
  而list的内存空间可以是不连续,它不支持随机访问,因此list::iterator则不支持"+"、"+="、"<"等操作符运算,因此代码20、26行会有编译错误。只能使用"++"进行迭代,例如代码27行,使用两次itl++来移动itl。还有list也不支持[]运算符,因此代码18行出现编译错误。
  总之,如果需要高效的随即存取,而不在乎插入和删除的效率,使用vector;如果需要大量的插入和删除,而不关心随即存取,则应使用list。
  vector拥有一段连续的内存空间,因此支持随机存取,如果需要高效的随即存取,而不在乎插入和删除的效率,使用vector。
  list拥有一段不连续的内存空间,因此支持随机存取,如果需要大量的插入和删除,而不关心随即存取,则应使用list。当大部分插入和删除发生在序列的头或尾时可以选择deque这种数据结构。

基于信用支付的零售商最优订购策略选择研究摘要传统的基于信用支付的供应链模型,假设下游零售商在信用支付期时向上游供应商支付货款。但在一定的金融环境下,当订购周期大于信用支付期时,零售商为了获得更多利息收入不会在信用支付期时沥青路面振动压实技术浅析摘要近代沥青路面最常见的病害就是水损开裂剥落,针对这些直接影响公路使用的病害,作为施工环节中最后一道工序振动压实,施工工艺与质量控制直接影响到整个沥青路面的使用。本文有针对性的结合移动互联网络技术的现状与未来之探索摘要随着新型网络的进入视线,计算机手机平板随之而来,互联网的世界不再只是局限在一处。那么就来详细看看至今为止移动通信和互联网之间擦出了什么样的火花,同时也仔细的研究移动互联网在现有临时跳通技术在跨越施工中的运用分析摘要随着我国经济的发展,超高压特高压输电线路在跨越运行时遇到的障碍物越来越多,导致张力架线跨越施工越来越困难,架线的施工安全没有保障施工进度变慢施工成本变高。文章利用临时跳跃技术解塑料齿轮设计中的齿根干涉检查及消除摘要随着科技的进步,塑料产品和电动工具成为人们生活中重要的一部分,而塑料产品又大多采用齿轮来传动。塑料齿轮的广泛应用得益于其自身的优点,例如噪声小吸振腐蚀性强轻质高效,且能够在无润数字摄影测量空三加密的精度控制及应用研究摘要空三加密是数字摄影测量过程中的一道重要工序。空三加密的精度高低和速度快慢直接影响整个作业的精度和进程,因此在整个过程中要注意每一个环节,保证精度。为了保证作业过程中的精度,就需小班幼儿艺术审美能力培养论文1。小班幼儿艺术审美能力教育的意义1。1有利于提高幼儿的想象力孩子在幼儿时期,这是他们对外界事物充满好奇的与疑问的时候。所以为孩子们营造一个宽松的舒适的学习环境,可以让孩子们更快乐艺术专业论文艺术专业的论文具有很强的专业性,下面就是品学网范文网小编为您收集整理的艺术专业论文的相关文章,希望可以帮到您,如果你觉得不错的话可以分享给更多小伙伴哦!艺术专业论文一1工科院校艺术艺术学专业论文艺术教育的创新是应对全球化多元化,应该注重艺术专业学生的全面发展文化素质的均衡,改变过去过于强调培养学生艺术技能而忽视文化知识教育的教育理念,积极改革课程设置与各门学科以及文化产业探讨录音作品创作中艺术和生活交融的本质含义论文摘要针对录音本身是否为艺术这一问题一直以来存在较大的争论。录音艺术的内涵就是把自然界中或者社会人文中存在的历史以某种需要创造性地记录下来。在全球科技飞速发展的时代背景之下,录音艺术从接受美学谈中学生文学鉴赏能力的培养(1)正文2000年3月颁布的高中语文新大纲(试验修订版)强调,应使学生具有初步的文学鉴赏能力,培养(学生)高尚的审美情趣和一定的审美能力。2000年3月版的高中语文新教材(人教版)说明
试谈32护理高职生共情能力的现状研究一对象与方法1。对象选取浙江某高校护理系所有2015级32高职在校生进行问卷调查(共计329人)。纳入标准愿意参加本调查者。排除标准不愿意参加本次调查者休病假者。2。方法(1)研究谈高职食品实训室管理模式与实训教师职能定位一引言实践教学是高职教育内涵发展的关键所在,是高等职业教育培养学生职业能力的核心环节。实训室的管理对于食品类专业而言,是提高人才培养质量的关键,直接关系到食品类专业的日常教学学生技谈高职数学体会高职数学作为高职院校的基础课程,是高等职业教育课程体系中不可缺少的重要组成部分,但由于高职生源和数学课程本身的特点,使得高职数学的改革始终没有突破性的进展。本文笔者对高职院校学生来探析财经类高职院校课证融合技能型人才培养的有效路径1财经类高职院校高素质技术技能人才培养的现状在我国职业教育的长期发展过程中,其对于技术技能型人才的培养目标经历了由技术员管理人员技工实用人才应用型人才到技能型人才技术技能人才的演变浅谈高职医药市场营销课程项目化教学设计医药市场营销是药品经营与管理药学等专业的一门专业核心课程,主要内容包括医药市场营销观念医药市场营销环境市场调查和预测医药目标市场营销战略医药市场营销策略等,对学生医药经营职业能力培浅谈高职院校经管类课程教学设计与岗位群核心技能培养高职院校经管类课程教学需要对接经济社会发展对于经济管理类人才的岗位技能需求,梳理岗位技能所应具备的核心技能,在课程教学过程中进行相应的教学设计,不断提高高职院校经管类课程教学的质量试谈互联网背景下高职院校3DMAX课程教学改革的思考随着网络技术的发展和运用,高校课程教学改革在互联网大背景下也在不断推进,部分高校开始着力在软件课程教学中探索新的授课方式,注重培养学生的实际操作技能和自学能力,提高学生的实践能力和浅谈电气自动化专业中职本科课程衔接的实践研究一电气自动化专业中职本科课程衔接的理论依据徐国庆在职业教育课程论论著中指出,职业教育的课程目标是培养学生的职业能力,职业教育课程展开的逻辑主线应以能力发展为顺序。职教课程体系的构建浅谈关于高职学前教育学课程实践教学改革的思考1。学前教育学实践教学现状分析1。1学前教育学实践教学内容缺乏系统性尽管高职学前教育专业在人才培养方案上进行了改革,尤其加大了实践教学比重,但在学前教育学的实践教学内容上,仍然重视浅谈广告设计与制作专业中高职课程体系衔接的研究1中高职广告设计与制作专业课程衔接的现状以及存在的问题中高职衔接是职教改革重要的探索方向,而课程内容的衔接是中高职衔接教育的重点环节。中高职有效衔接迎合教育发展规划纲要提出的发展要如何对农村小学学困生进行有效转化众所周知,农村小学由于诸多因素的影响,使得学困生的人数远远高于城市学校。而农村小学中存在的学困生往往人多数是留守儿童,其考试成绩普遍在二三十分以下,所以对他们的转化又是非常吃力的。