线性容器

  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,78,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)    收藏  举报

导航