seminar04 06_pairing
This commit is contained in:
		
							parent
							
								
									f8c3ca0535
								
							
						
					
					
						commit
						feef44db4d
					
				
					 1 changed files with 65 additions and 0 deletions
				
			
		
							
								
								
									
										65
									
								
								seminar04_templates/06_pairing/main.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								seminar04_templates/06_pairing/main.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,65 @@ | |||
| #include <iostream> | ||||
| #include <vector> | ||||
| #include <array> | ||||
| #include <string> | ||||
| #include <utility> | ||||
| using std::cout, std::endl, std::vector, std::pair; | ||||
| 
 | ||||
| template <typename T, typename U> | ||||
| std::ostream& operator<<(std::ostream& out, const std::pair<T, U>& p) | ||||
| { | ||||
|     out << "(" << p.first << ", " << p.second << ")"; | ||||
|     return out; | ||||
| } | ||||
| 
 | ||||
| template <typename T> | ||||
| std::ostream& operator<<(std::ostream& out, const std::vector<T>& v) | ||||
| { | ||||
|     out << "["; | ||||
|     for (size_t i = 0; i < v.size() - 1; ++i) | ||||
|         out << v[i] << ", "; | ||||
| 
 | ||||
|     if (!v.empty()) | ||||
|     { | ||||
|         out << v.back(); | ||||
|     } | ||||
|     out << "]"; | ||||
|     return out; | ||||
| } | ||||
| 
 | ||||
| template <typename T> | ||||
| vector<pair<typename T::value_type,typename T::value_type>> pairing(T& xs) { | ||||
|     typedef typename T::value_type U; | ||||
|     vector<pair<U, U>> res;     | ||||
| 
 | ||||
|     size_t size = xs.size(); | ||||
| 
 | ||||
|     for (int i = 0, n = (size % 2 ? size - 1: size); i < n; i += 2) | ||||
|         res.push_back(pair(xs[i], xs[i+1]));  | ||||
|     if (size % 2) | ||||
|             res.push_back(pair(xs[size - 1], U())); | ||||
|     return res; | ||||
| } | ||||
| 
 | ||||
| int main() | ||||
| { | ||||
|     std::vector v {10, 20, 30, 40, 50, 60}; | ||||
|     cout << pairing(v) << endl; | ||||
| 
 | ||||
| 
 | ||||
|     std::array<std::string, 7> a {"cat", "dog", "mouse", "elephant", "tiget", "axolotl", "wolf"}; | ||||
|     cout << pairing(a) << endl; | ||||
| 
 | ||||
| 
 | ||||
|     std::string s {"Cats and dogs!"}; | ||||
|     cout << pairing(s) << endl; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|     Программа должна напечатать: | ||||
| 
 | ||||
|     [(10, 20), (30, 40), (50, 60)] | ||||
|     [(cat, dog), (mouse, elephant), (tiget, axolotl), (wolf, )] | ||||
|     [(C, a), (t, s), ( , a), (n, d), ( , d), (o, g), (s, !)] | ||||
| */ | ||||
		Reference in a new issue