zoukankan      html  css  js  c++  java
  • cs11_adventure c++_lab1

    exercise1.cc

     1 #include <iostream>
     2 #include <vector>
     3 #include <stdlib.h>
     4 #include <algorithm>
     5 
     6 using namespace std;
     7 
     8 int myFunction()
     9 {
    10     return rand() % 100 + 1;
    11 }
    12 
    13 int main()
    14 {
    15     vector<int> vi1(100);
    16     generate(vi1.begin(), vi1.end(), myFunction);//可用generate函数初始化,与下功能一致
    17 /*
    18     for(int i = 0; i < 100; i++)
    19     {
    20         vi1[i] = (rand() % 100 + 1);
    21     }
    22 */
    23     vector<int> vi2(vi1.size());
    24     copy(vi1.begin(), vi1.end(), vi2.begin());
    25 
    26     for(int i = 0; i < 100; i++)
    27         cout << i << "        "<< vi1[i] << "    " << vi2[i] << endl;
    28 }
    View Code

    exercise2.cc

     1 #include <iostream>
     2 #include <vector>
     3 #include <stdlib.h>
     4 #include <algorithm>
     5 #include <string>
     6 
     7 using namespace std;
     8 
     9 string randomString()
    10 {
    11     int i = rand() % 11 + 5;//随机字符串长度
    12     string str = "";
    13     for(int j = 0; j < i; j++)
    14     {
    15         str += 'a' + rand() % 26;//随机字符串中内容
    16     }
    17     str += '';//字符串末尾处理
    18     return str;
    19 }
    20 
    21 bool myFunction(string s1, string s2)//自定义谓词1
    22 {
    23     return s1.size() < s2.size();
    24 }
    25 
    26 struct myClass//自定义谓词2
    27 {
    28     bool operator()(string s1, string s2)
    29     {
    30         return s1.size() < s2.size();
    31     }
    32 }myObject;
    33 
    34 /*
    35 class myClass//自定义谓词2
    36 {
    37 public:
    38     bool operator()(string s1, string s2)
    39     {
    40         return s1.size() < s2.size();
    41     }
    42 };
    43     myClass myObject;
    44 */
    45 
    46 int main()
    47 {
    48     vector<string> vs(100);
    49     vector<string>::iterator vsi;
    50 
    51     for(vsi = vs.begin(); vsi != vs.end(); vsi++)//填充随机字符串
    52     {
    53         *vsi = randomString();
    54     }
    55 
    56     for(int j = 0; j < 100; j++)//输出原始随机字符串
    57     {
    58         cout << j << "      " << vs[j] << endl;
    59     }
    60     cout << "原始值----------------------------" << endl;
    61 
    62     sort(vs.begin(), vs.end());//默认排序并输出
    63     for(int j = 0; j < 100; j++)
    64     {
    65         cout << j << "      " << vs[j] << endl;
    66     }
    67     cout << "第一次字母序排序------------------------"<< endl;
    68 
    69     sort(vs.begin(), vs.end(), myFunction);//自定义谓词1排序并输出
    70     sort(vs.begin(), vs.end(), myObject);//自定义谓词2排序并输出
    71     for(int j = 0; j < 100; j++)
    72     {
    73         cout << j << "      " << vs[j] << endl;
    74     }
    75     cout << "第二次按长度排序------------------------"<< endl;
    76 }
    View Code

    exercise3.cc

     1 #include <iostream>
     2 #include <vector>
     3 #include <stdlib.h>
     4 #include <algorithm>
     5 #include <string>
     6 
     7 using namespace std;
     8 
     9 int randomNum()
    10 {
    11     return rand() % 100 + 1;
    12 }
    13 
    14 struct myClass//自定义谓词
    15 {
    16     int even;
    17     int odd;
    18     bool operator()(int num)
    19     {
    20         if(num % 2)
    21         {
    22             even++ ;
    23             return true;
    24         }
    25         else
    26         {
    27             odd++;
    28             return false;
    29         }
    30     }
    31 }myObject;
    32 
    33 int main()
    34 {
    35     vector<int> vi(100);
    36     vector<int>::iterator itor;
    37 
    38     for(itor = vi.begin(); itor != vi.end(); itor++)//填充随机字符串
    39     {
    40         *itor = randomNum();
    41     }
    42 
    43     for(int i = 0; i < 100; i++)//输出原始随机字符串
    44     {
    45         cout << i << "      " << vi[i] << endl;
    46     }
    47     cout << "原始值----------------------------" << endl;
    48 
    49     myClass result = for_each(vi.begin(), vi.end(), myClass());//第一种调用方式,带状态
    50     myClass result = for_each(vi.begin(), vi.end(), myObject);//第二种调用方式,但是,其中odd和even是如何初始化为零的?
    51     cout << result.odd << endl << result.even << endl;
    52 }
    View Code

    exercise4.cc

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <iterator>
     5 #include <ext/functional>//为支持compose1函数额外添加的头文件
     6 
     7 using namespace std;
     8 
     9 int main()
    10 {
    11     //初始化vector
    12     vector<int> v;
    13     v.push_back(1);
    14     v.push_back(4);
    15     v.push_back(2);
    16     v.push_back(8);
    17     v.push_back(5);
    18     v.push_back(7);
    19 
    20     //把vector中内容通过指定的流迭代器写入到指定流中,放一个整数,后跟一个“ ”
    21     copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
    22     cout << endl;
    23 
    24     //remove_if移除序列中谓词返回true的元素,但是容器长度不变,所有元素还在容器中,其实是把所有应移除元素至于容器尾部并返回一个分界迭代器
    25     //compose1(f,g)函数执行顺序是f(g),先执行g,把g的结果作为f的参数
    26     //bind2nd函数是把一个二元谓词转化成一元谓词的函数,绑定第二个参数,使之成为一个一元谓词
    27     //modulus函数是取模函数,被绑定模2
    28     //那么所有的偶数都被标记,非偶数都被至于前面,返回的是指向8的迭代器
    29     vector<int>::iterator new_end =
    30             remove_if(v.begin(), v.end(),
    31                     __gnu_cxx::compose1(bind2nd(equal_to<int>(), 0),
    32                                 bind2nd(modulus<int>(), 2)));
    33 
    34     copy(v.begin(), v.end(), ostream_iterator<int>(cout, " "));
    35     cout << endl;
    36 }
    View Code

    exeercise5.cc

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <iterator>
     5 
     6 using namespace std;
     7 
     8 template <typename BidirectionalIterator>
     9 void my_reverse(BidirectionalIterator first, BidirectionalIterator last)
    10 {
    11     if(distance(first, last) == 0)//当什么都没有的情况
    12     {
    13         cout<<"为零换个屁啊"<<endl;
    14         return;
    15     }
    16     else
    17     {
    18         while(distance(first, last-1) > 0)//这是考虑除了迭代器重合外的所有情况,只有在两迭代器指向不同位置的时候才会对换,指向同一位值就不对换了
    19         {
    20             cout<<*first<<"---"<<*(last-1)<<endl;//对换的结构
    21             swap(*first, *(last-1));//注意,不是first和last对换,那是迭代器互相赋值,不对。也不是*first和*last之间的对换,因为last指向的是最后元素之后的元素,也不对。
    22             first++;
    23             last--;
    24         }
    25     }
    26 }
    27 
    28 int myFunction()
    29 {
    30     return rand() % 100 + 1;
    31 }
    32 
    33 int main()
    34 {
    35     int size;
    36     cout << "input size: " << endl;
    37     cin >> size;
    38     vector<int> vi(size);
    39 
    40     generate(vi.begin(), vi.end(), myFunction);
    41     copy(vi.begin(), vi.end(), ostream_iterator<int>(cout, " "));
    42     cout << endl;
    43 
    44     my_reverse(vi.begin(), vi.end());
    45     copy(vi.begin(), vi.end(), ostream_iterator<int>(cout, " "));
    46     cout << endl;
    47 }
    View Code
  • 相关阅读:
    P3302 [SDOI2013]森林
    P2542 [AHOI2005] 航线规划
    P5795 [THUSC2015]异或运算
    P3320 [SDOI2015]寻宝游戏
    P1963 [NOI2009] 变换序列
    一月练习日志
    计算几何全家桶
    bzoj1076: [SCOI2008]奖励关(期望dp+状压dp)
    bzoj3450 Easy(概率期望dp)
    Eclipse配置 自动补全功能 快捷键 alt+/
  • 原文地址:https://www.cnblogs.com/amdb/p/4470768.html
Copyright © 2011-2022 走看看