能给几个C++中STL简单应用的例题和讲解么

能给几个C++中STL简单应用的例题和讲解么,第1张

③ 第三,concept可以想成是一组合法程序。 2 基本的Concept(所谓正规型别)① assignable 可分配的, 可归属的, 可指定的② default constructible 可默认构造的③ equality comparable 可相等比较的 3.① const iterator 所指的对象不可修改的迭代器② mutable iterator 所指的对象可以被修改的迭代器 4 refinement (精炼、强化)refinement(精炼、强化)。如果conceptC2提供conceptC1的所有功能,再加上其他可能的额外功能,我们使说C2是C1的refinement。 5.五个iterator concepts①input iterator 缩写:InIt②output iterator 缩写:OutIt③forward iterator 缩写:FwdIt④bidirectional iterator 缩写:BidIt⑤random iterator 缩写:RanIt 6Iterator traits(迭代器特征)与Associate Types(相关型别)①这是为了能在算法中使用Iterator的相关型别而引入的一个中间层主要采用了三种技术A. 使用嵌套型别(这里要用到typename关键字);B. 引入中间层(增加一个类iterator_traits<I>),即所谓的iterator traits 机制;C. 使用偏特化(partial specialization),用来解决 Iterator 不是类(Iterator可能是指针)的情况及Iterator的value types 是常量等情况,这造成了iterator_traits类有以下几个版本: 针对型别为T的引数template<class _Iter> struct iterator_traits;针对型别为T的引数template<class _Ty> struct iterator_traits<_Ty >;针对型别为const T的引数template<class _Ty> struct iterator_traits<const _Ty >;②Iterator的相关型别(五个)struct iterator_traits{ // get traits from iterator _Iter //标签型别 tag type(迭代器分类型别,共有五个,它们是继承的关系) typedef typename _Iter::iterator_category iterator_category; typedef typename _Iter::value_type value_type; //差距型别 typedef typename _Iter::difference_type difference_type; typedef difference_type distance_type; // retained保留 typedef typename _Iter::pointer pointer; typedef typename _Iter::reference reference;};③自己定义的 Iterator或算法时必须支持iterator_traits④自己定义的 Iterator类I,最简单的做法就是让I继承iterator; 7.函数对象①function call *** 作符被重载 operator()②尽可能地将function object 的operator()声明为const member function③可以拥有member functions和member variables④可以没有默认构造函数 7.函数对象concepts ①无参数(Generator)f(); 单参(Unary)f(x); 双参(Binary)f(x , y);STL所定义的其它function object concepts都是这三种concepts 的refinements② Generator有一个相关型别result_type;Unary有二个相关型别result_type, argument_type;Binary有三个相关型别result_type, first_argument_type, second_argument_type;③function object具有相关型别,但程序无须知道相关型别的名称④adaptable function object 必须定义所有相关型别,定义时可以继承STL提供的两个基类unary_function和binary_function,简化工作。⑤ adaptable function object是function object的refinements⑥function object作为引数传递给function adapter,则该function object必须是adaptable function object 8Predicate n谓词v断言 缩写:pr① Predicate 是单一参数(Unary) 并返回 true 或 false 的function object;②相关型别 返回型别(bool) 引数型别 (T) 9 function adapter①adapter是这样一种东西,它能把一种接口转换成另一种接口②adaptable function object作为引数③几乎所有的STL adapter都提供了辅助函数,这纯粹只是为了方便,因为使用function object 必须给出function object的类型,而辅助函数则无须指明④如果需要将一般函数指针传递给function object adapter,可以利用 pointer_to_unary_function(该adapter的辅助函数为ptr_fun)等将函数转换为Adaptable Unary Function 10Iterator的提领 *** 作:x是Iterator的实例,应该尽可能用(x)m取代x->m,因为”->”并非广泛地被各家C++编译器所支持。 11.关于集合算法(includes ,set_union ,set_intersection,set_difference等)的一些特点:①要求引数是已排好序的区间(sorted range)②算法的输出区间(output range)一定是已排好序的③set及multiset特别满足泛型的集合算法④技巧:insert_iterator adapter可以使集合算法的输出结果安插至set之中的动作变得格外方便。 12list,set,map的性质:新元素的安插并不会造成既有元素的iterators失效,从set中删除元素也不会造成任何元素的iterators失效——当然被删除的元素的iterator除外。 13 如何将vector和string的数据传给遗留的API①vector: 如果你有一个vector对象v,而你需要得到一个指向v中数据的指针,以使得它可以被当作一个数组,只要使用&v[0]就可以了, 唯一的问题就是,如果v是空的,所以在传给API函数之前要先判断v是否为空同时要给出v的size②String: 对于string对象s,相应的咒语是简单的sc_str(),即合s为空也没有问题③注意: 不要用vbegin()代替&v[0],因为begin的返回类型是iterator,而不是一个指针 14 :使用“交换技巧”来修整过剩容量例如: vector<Contestant> contestants; …………vector<Contestant>(contestants)swap(contestants); 解释:表达式vector<Contestant>(contestants)建立一个临时vector,它是contestants的一份拷贝:vector的拷贝构造函数做了这个工作。但是,vector的拷贝构造函数只分配拷贝的元素需要的内存,所以这个临时vector没有多余的容量。 15技巧: 使用一个类(像Lock)来管理资源的生存期线程安全和STL容器 template<typename Container> // 获取和释放容器的互斥量class Lock { // 的类的模板核心;public: // 忽略了很多细节Lock(const Containers container): c(container){getMutexFor(c); // 在构造函数获取互斥量}~Lock(){releaseMutexFor(c); // 在析构函数里释放它}private:const Container& c;}使用Lock类:vector<int> v;{ // 建立新块;Lock<vector<int> > lock(v); // 获取互斥量vector<int>::iterator first5(find(vbegin(), vend(), 5));if (first5 != vend()) {first5 = 0;}} // 关闭块,自动// 释放互斥量 心得: ①这一技巧适应大多数资源的管理特别适合涉及线程安全及有异常发生时的资源(资源的申请与释放成对出现)管理②使用一个类(像Lock)来管理资源的生存期,在构造函数中申请资源,在析构函数中析放资源(关键)③为要使用的资源建立一个新的程序块,在块的开始处声明一个像Lock那样的管理资源的类变量,而且当我们不再需要该资源时就关闭那个块 (关键)④这样的办法通常称为资源获得即初始化,可以把资源的获得与释放之间的不匹配的机会减到最小并且在异常的情况下是稳健 16 :用empty来代替检查size()是否为0 17 有序区间的搜索算法binary_search、lower_bound、upper_bound和equal_range在一对random access 迭代器区间上查找只花费对数次时间和对数次的比较。

如果你需要暂停使用Concept2划船机,你可以使用以下步骤:

1 停止划动:先停止划动并减速,直到划动完全停止。

2 停止数显:数显将会停止显示,但是仪表盘上的数据将被保存。

3 熄灭液晶屏幕:待数显停止后,机器会自动熄灭液晶屏幕。

4 退出程序:如果你需要退出实时程序,请停止划动并将机器的伸缩杆压到底。

以上是对Concept2划船机进行暂停的方法,希望对你有所帮助。

以上就是关于能给几个C++中STL简单应用的例题和讲解么全部的内容,包括:能给几个C++中STL简单应用的例题和讲解么、concept2划船机怎么暂停、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9750417.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存