线性容器
1 /* 线性容器 */
2
3
4 #include<iostream>
5 #include<cstdlib>
6 #include<array>// 栈上的数组
7 #include<vector>// 堆上的数组
8 #include<list>// 双链表
9 #include<algoruthm>// 算法
10
11 using namespace std;
12
13 // 仿函数,重载(),把对象名当作函数,加上模板可以适用于任何数据类型
14 // 仿函数和容器无关
15 template<class T>
16 class show
17 {
18 public:
19 void operator()(const T & t)
20 {
21 cout << t << endl;
22 }
23 };
24
25 void main()
26 {
27 array<int,5> myarray = {1,2,3,4,5};
28
29 //myarray[1];
30
31 show<int> myshow;
32 for (int i=0;i<5;i++)
33 {
34 myshow(myarray[i]);
35 }
36
37 for(auto i : myarray)
38 {
39 cout << i << endl;
40 }
41
42 for_each(myarray.bengin(),myarray.end(),myshow);// 算法 迭代器 仿函数 一起发挥ide作用
43 for_each(myarray.bengin(),myarray.end(),show<int>());// 仿函数的形式
44
45
46 array<char *,5> mystrs = {"hello","world","run","down","go"};
47 for_each(mystrs.bengin(),mystrs.end(),show<char*>());// 仿函数的形式
48 cin.get();
49 }
50
51 //-----------------------------------------------------------------------------
52
53
54 template<class T>
55 void print(const T & t)
56 {
57 cout << t << endl;
58 }
59
60
61 void main()
62 {
63
64 vector<char*> myv = {"hello","world","run","down","go"};
65
66 for_each(myv.bengin(),myv.end(),show<char*>());// 仿函数的形式
67
68
69 list<int> mylist = {1,2,3,4,5};
70 for_each(mylist.bengin(),mylist.end(),show<int>());
71 for_each(mylist.bengin(),mylist.end(),[](int num){cout << num << endl;});
72 for_each(mylist.bengin(),mylist.end(),print<int>);
73
74 // for_each 适用于任何容器,任何容器都有迭代器,算法依赖于策略
75 cin.get();
76
77 }
78
79 //-----------------------------------------------------------------------------
80
81 void main()
82 {
83 vector<char*> myv = {"hello","world","run","down","go"};
84 list<int> mylist = {1,2,3,4,5,6,7,8,10};
85
86 {
87 // find 寻找相等的
88 auto i = find(mylist.begin(),mylist.end(),8);
89
90 if(i != mylist.end())// end() 为空
91 {
92 cout << "不存在" << endl;
93 }
94 else
95 {
96 cout << *i << endl;
97 }
98 }
99
100
101 {
102 // find 寻找相等的
103 auto i = find(myv.begin(),myv.end(),"go");
104
105 if(i != myv.end())// end() 为空
106 {
107 cout << "不存在" << endl;
108 }
109 else
110 {
111 cout << *i << endl;
112 }
113 }
114
115
116 }
117
118 //-----------------------------------------------------------------------------
119
120 bool isdiv5(int x)
121 {
122 return x%5?0:1;
123 }
124
125 struct isdivfive// 仿函数
126 {
127 bool operator ()(int x)
128 {
129 return x%5?0:1;
130 }
131 };
132
133 void main()
134 {
135 vector<int> myv = {1,2,3,4,5,6,7,10};
136 auto i = find_if(myv.begin(),myv.end(),isdiv5)
137
138 if(i != myv.end())
139 {
140 cout << *i << endl;
141 }
142
143 else
144 {
145 cout << "找不到" << endl;
146 }
147
148 auto j = find_if(i+1,my.end(),isdiv5)
149
150 if(j != myv.end())
151 {
152 cout << *j << endl;
153 }
154
155 else
156 {
157 cout << "找不到" << endl;
158 }
159
160 // 仿函数演示
161
162 auto i = find_if(myv.begin(),myv.end(),isdivfive())
163
164 if(i != myv.end())
165 {
166 cout << *i << endl;
167 }
168
169 else
170 {
171 cout << "找不到" << endl;
172 }
173
174 auto j = find_if(i+1,my.end(),isdivfive())
175
176 if(j != myv.end())
177 {
178 cout << *j << endl;
179 }
180
181 else
182 {
183 cout << "找不到" << endl;
184 }
185
186 cin.get();
187 }
188
189
190 //-----------------------------------------------------------------------------
191
192 // 根据x*y 比较大小
193 struct MyStruct
194 {
195 int x;
196 int y;
197
198 void operator()(const MyStruct & my)
199 {
200 cout << my.x << " " << my.y << endl;
201 }
202 };
203
204
205
206 void main()
207 {
208
209 vector<MyStruct> myv = {{32,5},{2,4},{1,2},{3,5},{8,5},{6,5}};
210
211 for_each(myv.begin(),myv.end(),MyStruct());
212
213 {
214 vector<int> myv = {1,2,3,4,5,6,7,10};
215 auto i = find_if(myv.begin(),myv.end(),isdivfive())
216 sort(myv.begin(),myv.end(),print<int>);
217 }
218 cin.get();
219 }
长风破浪会有时,直挂云帆济沧海
posted on 2015-06-13 14:51 Dragon-wuxl 阅读(229) 评论(0) 收藏 举报
浙公网安备 33010602011771号