西门子PLC STL语言程序详细解释

西门子PLC STL语言程序详细解释,第1张

这个简单的,我有STL语言的芹漏说明书,看下就好了,主要就是数顷首悔据传送L ,T指令,整数转化成实数DTR指令 跳雀正转指令JCN第一句是set save 是强制能流为1,即强制地址位L24.1=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 6.Iterator 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_categorytypedef typename _Iter::value_type value_type//差距型别 typedef typename _Iter::difference_type difference_typetypedef difference_type distance_type// retained保留 typedef typename _Iter::pointer pointertypedef typename _Iter::reference reference}③自己定义的 Iterator或算法时必须支持iterator_traits.④自己定义的 Iterator类I,最简单的做蠢嫌法就是让I继承iterator7.函数对象①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. 8.Predicate 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. 10.Iterator的提领 *** 作: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之中的动作变得格外方便。 12.list,set,map的性质:新元素的安插并不会造成既有元素的iterators失效,从set中删除元素也不会造成任何元素的iterators失效——当然被删除的元素的iterator除外。 13. 如何将vector和string的数据传给遗留的API①vector: 如果你有一个vector对象v,而你需要得到一个指向v中数据的指针,以使得它可以被当作一个数组,只要使用&v[0]就可以了, 唯一的问题就是,如果v是空的,所以在传给API函数之前要先判断v是否为空.同时要给出v的size.②String: 对于string对象s,相应的咒语是简单的s.c_str(),即合s为空也没有问题.③注意: 不要用v.begin()代替&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(v.begin(), v.end(), 5))if (first5 != v.end()) {*first5 = 0}} // 关闭块,自动// 释放互斥量 心得: ①这一技巧适应大多数资源的管理.特别适合涉及线程安全及有异常发生时的资源(资源的申请与释放成对出现)管理.②使用一个类(像Lock)来管理资源的生存期,在构造函数中申请资源,在析构函数中析放资源.(关键)③为要使用的资源建立一个新的程序块,在块的开始处声明一个像Lock那样的管理资源的类变量,而且当我们不再需要该资源时就关闭那个块. (关键)④这样的办法通常称为资源获得即初始化,可以把资源的获得与释放之间的不匹配的机会减到最小.并且在异常的情况下是稳健. 16. :用empty来代替检查size()是否为0 17. 有序区间的搜索算法binary_search、lower_bound、upper_bound和equal_range在一对random access 迭代器区间上查找只花费对数次时间和对数次的比较。

while(begin != end )

words[*begin++]++

这个是利利用了流迭代器来从标准输入中读取字符串,在你代码里是是string类型的所以读取string,也就是空格字符隔开的字符串

words是个map,其中的*begin++就是读取并返回输入,如果这个字符串在容器里没有的话,words[*begin++]把这个字符串存在容器里,外面的++把它对应的计数物昌增加为1,如果这个单词已经祥返存在的话就只接执行后面的++了,增加它的谨蚂饥计数

后面就输出这段话中出现的单词和它们出现的次数


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

原文地址: http://outofmemory.cn/yw/8197420.html

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

发表评论

登录后才能评论

评论列表(0条)

保存