设为首页 加入收藏

TOP

《C++ Primer Plus》学习笔记10(四)
2015-07-20 18:04:27 来源: 作者: 【 】 浏览:9
Tags:Primer Plus 学习 笔记
ngeles"));

5、函数对象
1)list模板中又一个将断言作为参数的remove_if()成员,该函数将断言应用与区间的每一个元素如果为true,则删除这些元素。

//删除链表three中所有大于100的元素
bool tooBig(int n){return n > 100;}
list
   
     scores; …… scores.remove_if(tooBig); 
   

2)预定义的函数数
tranform()
前两个参数是指定容器区间的迭代器,第3个参数是指定将结果复制到哪里的迭代器,最后一个参数是一个函数符,它被应用于区间中的每个元素,生成结果中的新元素。

transform(gr8.begin(), gr8.end(), out, sqrt);

6、算法
STL将算法库分成4组
①非修改式序列操作
②修改式序列操作
③排序和相关操作
④通用数字运算
1)函数与容器的方法
首先它更适合于特定的容器,其次作为成员函数,它可以使用模板类的内存管理工具,从而在需要时调整容器的长度。
例如la是一个list 对象,使用链表的remove()方法:

la.remove(4);//链表中所有值为4的元素将被删除

还有一种形式

remove(lb.begin(), lb.end(), 4);

由于该remove()函数不是成员,因此不能调整链表的长度,它将没有删除的元素放在链表的开始位置,并返回一个指向新的超尾值的迭代器,这样,便可以用迭代器来修改容器的长度
链表中还可以使用erase来删除一个区间

lb.erase(last,lb.end());

2)使用STL

//用于显示3个容器,包含输入内容的矢量,包含单词列表的集合和包含单词计数的映象内容.cpp
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
        #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              using namespace std; //忽略大小写,转换为小写由于tolower()函数被定义为int tolower(int)编译器希望为char,我们可以用toLower代替tolower char toLower(char ch) { return tolower(ch); } string & ToLower(string & st); void display(const string & s); int main() { //创建一个vector
             
              对象,并用push_back()将输入的单词添加到矢量中 vector
              
                words; string input; while(cin >> input && input != "quit") words.push_back(input); //全部一行显示输出的单词,每个单词空一个空格 for_each(words.begin(), words.end(), display); cout << endl; //使用transform将矢量中的数据复制到集合中,使用一个转换函数将字符串转换成小写,并且我们要排序,且将相同的只显示一次 set
               
                 wordset; transform(words.begin(), words.end(), insert_iterator
                
                 >(wordset,wordset.begin()), ToLower); for_each(wordset.begin(),wordset.end(), display); cout << endl; //单词和计数作为pair
                 
                  对象存储在map对象中 map
                  
                   wordmap; set
                   
                    ::iterator si; for(si = wordset.begin(); si != wordset.end(); si++) wordmap[*si] = count(words.begin(), words.end(), *si); for(si = wordset.begin(); si != wordset.end(); si++) cout << *si << ": " << wordmap[*si] << endl; return 0; } string & ToLower(string & st) { transform(st.begin(), st.end(), st.begin(), toLower); return st; } void display(const string & s) { cout << s << " "; } 
                   
                  
                 
                
               
              
             
            
           
          
         
        
      
     
    
   

运行结果:



<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<完结2014.7.24 2:50

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Codeforces 448E Divisors 下一篇A POJ1611

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: