C++学习记录(十一)容器deque、list、stack、set、map,I/O文件流,多线程入口

这是第十一天的学习。

  1 #include <iostream>
  2 #include <deque>
  3 #include <algorithm>
  4 #include <list>
  5 #include <stack>
  6 #include <queue>
  7 #include <set>
  8 #include <map>
  9 
 10 using namespace std;
 11 
 12 void Show(int& value)
 13 {
 14     cout << value << endl;
 15 }
 16 
 17 void test()
 18 {
 19     deque<int> _deque;
 20     _deque.push_back(10);
 21     _deque.push_back(30);
 22     _deque.push_back(50);
 23     _deque.push_back(70);
 24     _deque.push_back(90);
 25     for_each(_deque.begin(),_deque.end(),&Show);
 26     cout << "---***---" << endl;
 27     sort(_deque.begin(),_deque.end(),greater<int>());
 28     for_each(_deque.begin(),_deque.end(),&Show);
 29 }
 30 
 31 void test1()
 32 {
 33     list<int> _list;
 34     _list.push_back(20);
 35     _list.push_back(40);
 36     _list.push_back(10);
 37     _list.push_back(90);
 38     _list.push_back(60);
 39     _list.sort();
 40     for_each(_list.begin(),_list.end(),&Show);
 41     cout << "---***---" << endl;
 42     _list.sort(greater<int>());
 43     for_each(_list.begin(),_list.end(),&Show);
 44     cout << "---***---" << endl;
 45     _list.reverse();
 46     for_each(_list.begin(),_list.end(),&Show);
 47     cout << "---***---" << endl;
 48     for (auto it = _list.begin(); it!=_list.end(); it++)
 49     {
 50         cout << *it << endl;
 51     }
 52     cout << "---***---" << endl;
 53     cout << _list.size() << endl;
 54 }
 55 
 56 void test2()
 57 {
 58     stack<int> _stack;
 59     _stack.push(55);
 60     _stack.push(17);
 61     _stack.push(66);
 62     _stack.push(77);
 63     while (!_stack.empty())
 64     {
 65         cout << _stack.top() << endl;
 66         _stack.pop();
 67     }
 68 }
 69 
 70 void test3()
 71 {
 72     queue<int> _qu;
 73     _qu.push(10);
 74     _qu.push(20);
 75     _qu.push(30);
 76     while (!_qu.empty())
 77     {
 78         cout << _qu.front() << endl;
 79         _qu.pop();
 80     }
 81 }
 82 
 83 class Stu
 84 {
 85 private:
 86     int id;
 87     string name;
 88     int age;
 89 public:
 90     Stu(int id = 100, string name = "", int age = 0)
 91     {
 92         this->id = id;
 93         this->name = name;
 94         this->age = age;
 95     }
 96     void showInfo() const
 97     {
 98         cout << "Number: " << id << ", name: " << name << ", age: " << age << endl;
 99     }
100 
101     template<class T>
102     friend class My_compair;
103 };
104 template<class T>
105 class My_compair
106 {
107 public:
108     //返回值为布尔,称为谓词
109     //bool operator()(T t1, T t2) { return t1.id < t2.id; }
110     bool operator()(const T& t1, const T& t2) { return t1.id < t2.id; }
111 };
112 
113 void test4()
114 {
115     //set<int> _set;
116     // 从大到小排序
117     set<int, greater<int>> _set;
118     _set.insert(10);
119     _set.insert(90);
120     _set.insert(30);
121     _set.insert(70);
122     _set.insert(50);
123     for_each( _set.begin(), _set.end(), [=](int value){
124         cout << value << endl;}
125     );
126     cout << "---***---" << endl;
127 
128     auto it = _set.find(50);
129     if( it != _set.end()) { cout << "Finded this value! " << *it << endl; }
130     else { cout << "Not find this value! " << endl; }
131     cout << "---***---" << endl;
132 
133     // set中的比较器,只能为函数对象,不能为函数指针
134 
135     set<Stu, My_compair<Stu>> s1;
136     s1.insert(Stu(101, "zhangsan", 18));
137     s1.insert(Stu(102, "lisi", 19));
138     s1.insert(Stu(105, "wangwu", 21));
139     s1.insert(Stu(104, "zhaoliu", 20));
140     //for_each(s1.begin(),s1.end(),[&](const Stu& stu){ stu.showInfo(); } );
141     //cout << "---***---" << endl;
142 
143     pair< set<Stu, My_compair<Stu> >::iterator, bool> inst1;
144     inst1 = s1.insert(Stu(103, "songqi", 22));
145     if (!inst1.second) { cout << "Insert failed!" << endl; }
146     else { cout << "Insert successed!" << endl; inst1.first->showInfo(); }
147     cout << "---***---" << endl;
148 
149     pair<int, string> p1 = make_pair(106, "sunba");
150     cout << p1.first << ", name: " << p1.second << endl;
151     pair<int, string> p2(107, "zhoujiu");
152     cout << p2.first << ", name: " << p2.second << endl;
153 }
154 
155 void test5()
156 {
157     //map<int, string> map1;
158     map<int, string, greater<int>> map1;
159     map1.insert(pair<int, string>(10,"xiaohong"));
160     map1.insert(make_pair(11,"xiaohei"));
161     map1.insert(map<int, string>::value_type(12,"xiaohuang"));
162     // map中键值是只读的,需要加const
163     for_each(map1.begin(),map1.end(),[=](pair<const int,string>& _map){
164         cout << _map.first << "," << _map.second << endl; }
165     );
166 }
167 
168 int main()
169 {
170     // vector:历史操作记录存储,经常查看数据
171     // deque:排队购票,头尾数据快速处理
172     // list:公交车乘客存储,平凡不确定位置元素插入
173     // set:手机游戏个人得分记录,高低顺序排序
174     // map:按ID号存储十万个用户,通过ID查找,查找效率高
175 
176     // -1- deque双端队列,允许在其首尾两端插入
177     //test();
178 
179     // -2- list可以快速插入和删除数据
180     //test1();
181 
182     // -3- stack栈,先进后出,queue队列,先进先出
183     //test2();
184     //test3();
185 
186     // -4- set对所以元素键值排序,值唯一
187     //test4();
188 
189     // -5- map有序键值对容器
190     test5();
191 
192     //cout << "Hello World!" << endl;
193     return 0;
194 }
  1 #include <iostream>
  2 #include <fstream>
  3 #include <sstream>
  4 
  5 #include <thread>
  6 #include <unistd.h>
  7 
  8 using namespace std;
  9 
 10 void write()
 11 {
 12     ofstream file;
 13     file.open("./1.txt",ios_base::app);
 14     //ofstream file1("./2.txt",ios_base::app);
 15     if(!file.is_open()) { cout << "Write file failed" << endl; }
 16     file << "xieru" << endl;
 17     file.close();
 18 }
 19 
 20 void read()
 21 {
 22     ifstream file;
 23     file.open("./1.txt", ios_base::in);
 24     if(!file.is_open()) { cout << "Open file failed" << endl; }
 25 
 26     // -1-
 27     /*
 28     string filetext;
 29     while (getline(file,filetext))
 30     {
 31         cout << filetext << endl;
 32     }
 33     */
 34 
 35     // -2-
 36     stringstream ss;
 37     ss << file.rdbuf();
 38     string str = ss.str();
 39     cout << str << endl;
 40 }
 41 
 42 void show()
 43 {
 44     cout << " Thread begin running" << endl;
 45     for(int i = 0; i<10; i++)
 46     {
 47         cout << i << endl;
 48         sleep(1);
 49     }
 50     cout << " Thread end" << endl;
 51 }
 52 
 53 class A
 54 {
 55 public:
 56     void operator() ()
 57     {
 58         cout << " Thread begin running" << endl;
 59         for(int i = 0; i<10; i++)
 60         {
 61             cout << i << endl;
 62             sleep(1);
 63         }
 64         cout << " Thread end" << endl;
 65     }
 66     void showInfo()
 67     {
 68         cout << " Thread begin running" << endl;
 69         for(int i = 0; i<10; i++)
 70         {
 71             cout << i << endl;
 72             sleep(1);
 73         }
 74         cout << " Thread end" << endl;
 75     }
 76 };
 77 
 78 int main()
 79 {
 80     // I/O 操作
 81     //write();
 82     //read();
 83 
 84     // 多线程
 85     // -1- 使用全局函数指针来实现线程入口
 86     //thread my_thread(&show);
 87     //my_thread.join();
 88 
 89     // -2- 使用匿名函数
 90     /*
 91     thread my_thread2( [=](){
 92         cout << " Thread begin running" << endl;
 93         for(int i = 0; i<10; i++)
 94         {
 95             cout << i << endl;
 96             sleep(1);
 97         }
 98         cout << " Thread end" << endl;
 99     } );
100     my_thread2.join();
101     */
102 
103     // -3- 使用仿函数
104     A a;
105     thread my_thread3(a);
106     my_thread3.join();
107 
108     // -4- 使用成员函数
109     A a1;
110     thread my_thread4(&A::showInfo, &a1);
111     my_thread4.join();
112 
113     //cout << "Hello World!" << endl;
114     return 0;
115 }

 

posted @ 2022-05-15 17:10  Z_He  阅读(29)  评论(0编辑  收藏  举报