array3.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /* example for using class array<>
  2. * (C) Copyright Nicolai M. Josuttis 2001.
  3. * Distributed under the Boost Software License, Version 1.0. (See
  4. * accompanying file LICENSE_1_0.txt or copy at
  5. * http://www.boost.org/LICENSE_1_0.txt)
  6. */
  7. #include <string>
  8. #include <iostream>
  9. #include <boost/array.hpp>
  10. template <class T>
  11. void print_elements (const T& x);
  12. int main()
  13. {
  14. // create array of four seasons
  15. boost::array<std::string,4> seasons = {
  16. { "spring", "summer", "autumn", "winter" }
  17. };
  18. // copy and change order
  19. boost::array<std::string,4> seasons_orig = seasons;
  20. for (std::size_t i=seasons.size()-1; i>0; --i) {
  21. std::swap(seasons.at(i),seasons.at((i+1)%seasons.size()));
  22. }
  23. std::cout << "one way: ";
  24. print_elements(seasons);
  25. // try swap()
  26. std::cout << "other way: ";
  27. std::swap(seasons,seasons_orig);
  28. print_elements(seasons);
  29. // try reverse iterators
  30. std::cout << "reverse: ";
  31. for (boost::array<std::string,4>::reverse_iterator pos
  32. =seasons.rbegin(); pos<seasons.rend(); ++pos) {
  33. std::cout << " " << *pos;
  34. }
  35. // try constant reverse iterators
  36. std::cout << "reverse: ";
  37. for (boost::array<std::string,4>::const_reverse_iterator pos
  38. =seasons.crbegin(); pos<seasons.crend(); ++pos) {
  39. std::cout << " " << *pos;
  40. }
  41. std::cout << std::endl;
  42. return 0; // makes Visual-C++ compiler happy
  43. }
  44. template <class T>
  45. void print_elements (const T& x)
  46. {
  47. for (unsigned i=0; i<x.size(); ++i) {
  48. std::cout << " " << x[i];
  49. }
  50. std::cout << std::endl;
  51. }