实验一

  1 //
  2 // 现代C++标准库、算法库体验
  3 // 本例用到以下内容:
  4 // 1. 字符串string, 动态数组容器类vector、迭代器
  5 // 2. 算法库:反转元素次序、旋转元素
  6 // 3. 函数模板、const引用作为形参
  7 
  8 #include <iostream>
  9 #include <string>
 10 #include <vector>
 11 #include <algorithm>
 12 
 13 using namespace std;
 14 
 15 // 声明
 16 // 模板函数声明
 17 template<typename T>
 18 void output(const T &c);
 19 
 20 // 普通函数声明
 21 void test1();
 22 void test2();
 23 void test3();
 24 
 25 int main() {
 26 cout << "测试1: \n";
 27 test1();
 28 
 29 cout << "\n测试2: \n";
 30 test2();
 31 
 32 cout << "\n测试3: \n";
 33 test3();
 34 }
 35 
 36 // 函数实现
 37 // 输出容器对象c中的元素
 38 template <typename T>
 39 void output(const T &c) {
 40 for(auto &i: c)
 41 cout << i << " ";
 42 cout << endl;
 43 }
 44 
 45 // 测试1
 46 // 组合使用算法库、迭代器、string反转字符串
 47 void test1() {
 48 string s0{"0123456789"};
 49 cout << "s0 = " << s0 << endl;
 50 
 51 string s1{s0};
 52 reverse(s1.begin(), s1.end()); // 反转指定迭代器区间的元素
 53 cout << "s1 = " << s1 << endl;
 54 
 55 string s2{s0};
 56 reverse_copy(s0.begin(), s0.end(), s2.begin()); // 将指定迭代区间的元素拷贝到指定迭代器开始的目标区间,并且在复制过程中反转次序
 57 cout << "s2 = " << s2 << endl;
 58 }
 59 
 60 // 测试2
 61 // 组合使用算法库、迭代器、vector反转动态数组对象vector内数据
 62 void test2() {
 63 vector<int> v0{2, 0, 4, 9};
 64 cout << "v0: ";
 65 output(v0);
 66 
 67 vector<int> v1{v0};
 68 reverse(v1.begin(), v1.end());
 69 cout << "v1: ";
 70 output(v1);
 71 
 72 vector<int> v2{v0};
 73 reverse_copy(v0.begin(), v0.end(), v2.begin());
 74 cout << "v2: ";
 75 output(v2);
 76 }
 77 
 78 // 测试3
 79 // 组合使用算法库、迭代器、vector实现元素旋转移位
 80 void test3() {
 81 vector<int> v0{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
 82 cout << "v0: ";
 83 output(v0);
 84 
 85 vector<int> v1{v0};
 86 rotate(v1.begin(), v1.begin()+1, v1.end()); // 旋转指定迭代器区间[v1.begin(), v1.end())之间的数据项,旋转后从迭代器v1.begin()+1位置的数据项开始
 87 cout << "v1: ";
 88 output(v1);
 89 
 90 vector<int> v2{v0};
 91 rotate(v2.begin(), v2.begin()+2, v2.end());
 92 cout << "v2: ";
 93 output(v2);
 94 
 95 vector<int> v3{v0};
 96 rotate(v3.begin(), v3.end()-1, v3.end());
 97 cout << "v3: ";
 98 output(v3);
 99 
100 vector<int> v4{v0};
101 rotate(v4.begin(), v4.end()-2, v4.end());
102 cout << "v4: ";
103 output(v4);
104 }
105 
106  

 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 #include<algorithm>
 5 #include<numeric>
 6 #include<iomanip>
 7 using namespace std;
 8 template<typename T>
 9 void output(const T& c) {
10     for (auto& i : c)
11         cout << i << " ";
12     cout << endl;
13 }
14 int rand_int_100() {
15     return rand() % 101;
16 }
17 void test1() {
18     vector<int> v0(10);
19     generate(v0.begin(), v0.end(), rand_int_100);
20     cout << "v0:";
21     output(v0);
22     vector<int> v1{ v0 };
23     sort(v1.begin(), v1.end());
24     cout << "v1:";
25     output(v1);
26     vector<int> v2{ v0 };
27     sort(v2.begin() + 1, v2.end() - 1);
28     cout << "v2:";
29     output(v2);
30 }
31 void test2() {
32     vector<int> v0(10);
33     generate(v0.begin(), v0.end(), rand_int_100);
34     cout << "v0:";
35     output(v0);
36     auto iter1 = min_element(v0.begin(), v0.end());
37     cout << "最小值:" << *iter1 << endl;
38     auto iter2 = max_element(v0.begin(), v0.end());
39     cout << "最大值:" << *iter2 << endl;
40     auto ans = minmax_element(v0.begin(), v0.end());
41     cout << "最小值:" << *(ans.first) << endl;
42     cout << "最大值:" << *(ans.second) << endl;
43     double avg1 = accumulate(v0.begin(), v0.end(), 0) / v0.size();
44     cout << "均值:" << fixed << setprecision(2) << avg1 << endl;
45     cout << endl;
46     vector<int> v1{ v0 };
47     cout << "v0:";
48     output(v0);
49     sort(v1.begin(), v1.end());
50     double avg2 = accumulate(v1.begin() + 1, v1.end() - 1, 0) / (v1.size() - 2);
51     cout << "去掉最大值、最小值之后,均值:" << avg2 << endl;
52 
53 }
54 int main() {
55     cout << "测试1:\n";
56     test1();
57     cout << "测试2:\n";
58     test2();
59 }
View Code

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 using namespace std;
 5 bool is_palindrome(string s) {
 6     string s1{ s };
 7     reverse(s1.begin(), s1.end());
 8     if (s1 == s)
 9         return true;
10     return false;
11 }
12 int main() {
13     string s;
14     while (cin >> s)
15         cout << boolalpha << is_palindrome(s) << endl;
16 
17 }
View Code

 1 #include <iostream>
 2 #include <string>
 3 #include <algorithm>
 4 
 5 bool is_palindrome(std::string s);
 6 
 7 int main() {
 8     using namespace std;
 9     string s;
10 
11     while(cin >> s)  // 多组输入,直到按下Ctrl+Z后结束测试
12         cout << boolalpha << is_palindrome(s) << endl;
13 
14 }
15 
16 // 函数is_palindrom定义
17 // 待补足
18 // ×××
19 bool is_palindrome(std::string s){
20     std::string b{s};
21     reverse(s.begin(),s.end());
22     if(s == b){
23         return true;
24     }else{
25         return false;
26     }
27 }
View Code

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main() {
 5     cout << "  ";
 6     vector<char> arr;
 7     for(int i = 0;i < 26;i++){
 8         cout << " ";
 9         cout << char('a' + i);
10         arr.push_back(char('A' + i));
11     }
12     cout << endl;
13     for(int i = 1;i <= 26;i++){
14         cout << setw(2) << setfill(' ') << i;
15         rotate(arr.begin(),arr.begin() + 1,arr.end());
16         for(auto ele:arr){
17             cout << " ";
18             cout << ele;
19         }
20         cout << endl;
21     }
22 
23 
24     return 0;
25 }
View Code

 1 #include <iostream>
 2 #include <vector>
 3 #include <iomanip>
 4 #include <numeric>
 5 #include <time.h>
 6 
 7 using namespace std;
 8 
 9 int calculation();
10 int rand_int(int range) 
11 {
12     srand((unsigned)time(NULL));
13     return rand() % (range + 1);
14 }
15 char rand_flag() {
16     vector<char> v = { '+', '-', '*',  '/' };
17     return v[rand_int(3)];
18 }
19 void output(int a, int b, char flag) {
20     cout << a << " " << flag << " " << b << " = ";
21 }
22 
23 int main() 
24 {
25     int num = 0;
26     double ave = 0;
27     while (++num <= 10) 
28      {
29         int ans, given_ans;
30         ans = calculation();
31         cin >> given_ans;
32         if (ans == given_ans)
33             ave++;
34     }
35     cout << "正确率:" << fixed << setprecision(2) << ave * 10 << "%" << endl;
36 }
37 
38 int calculation() 
39 {
40     char flag = rand_flag();
41     if (flag == '+') 
42     {
43         int a = rand_int(10), b = rand_int(10);
44         output(a, b, flag);
45         return a + b;
46     }
47     else if (flag == '*') 
48     {
49         int a = rand_int(10), b = rand_int(10);
50         output(a, b, flag);
51         return a * b;
52     }
53     else if (flag == '-')
54     {
55         int a = rand_int(10), b = rand_int(10);
56         while (a < b) 
57        {
58             int t = a;
59             a = b;
60             b = t;
61         }
62         output(a, b, flag);
63         return a - b;
64     }
65     else
66     {
67         int a = rand_int(10);
68         vector<int> v;
69         int t = 0;
70         while (1) 
71        {
72             for (int i = 1; i <= a; i++) 
73            {
74                 if (a % i == 0)
75                    {
76                     v.push_back(i);
77                     t++;
78                 }
79             }
80             if (t == 0)
81                 a = rand_int(10);
82             else
83                 break;
84         }
85         int b = v[rand_int(t - 1)];
86         output(a, b, flag);
87         return a / b;
88     }
89 }
View Code

 总结:比起巩固课上知识,我可能通过别人的代码学到的函数更多……可能我确实太菜了……多敲代码多学点吧……

posted @ 2024-10-15 17:23  十二门  阅读(6)  评论(0编辑  收藏  举报