CHAPTER9-40.cpp
上传用户:fjc899
上传日期:2007-07-03
资源大小:187k
文件大小:4k
源码类别:

STL

开发平台:

C/C++

  1. //文件名:CHAPTER9-40.cpp
  2. #pragma warning(disable: 4786)
  3. #include <set>
  4. #include <iostream>
  5. int main()
  6. {
  7. //采用默认构造器构造c1
  8. std::multiset<int> c1 ;
  9. int ai[] = {0, 0, 1, 1, 2, 2, 3, 4} ;
  10. //创建multset变量c2,并且使用迭代器初始化其范围
  11. std::multiset<int> c2(ai, ai + 8) ;
  12. //采用拷贝构造函数方式
  13. std::multiset<int> c3(c2) ;
  14. std::multiset<int>::iterator Iter ;
  15. std::multiset<int>::reverse_iterator RevIter ;
  16. //采用empty判断multiset变量c1是否为空
  17. if(c1.empty())
  18. { std::cout << "multiset c1 is empty" << std::endl ; }
  19. else
  20. { std::cout << "multiset c1 is not empty" << std::endl ; }
  21. //采用begin, end进行访问头和尾访问
  22. std::cout << "c2 (using begin, end)  = " ;
  23. for(Iter = c2.begin(); Iter != c2.end(); Iter++)
  24. { std::cout << *Iter << " " ; }
  25. std::cout << std::endl ;
  26. //采用rbegin, rend进行访问头和尾访问
  27. std::cout << "c2 (using rbegin, rend) = " ;
  28. for(RevIter = c2.rbegin(); RevIter != c2.rend(); RevIter++)
  29. { std::cout << *RevIter << " " ; }
  30. std::cout << std::endl ;
  31. //采用函数insert插入c1元素
  32. c1.insert(ai, ai+4) ;
  33. c1.insert(1) ;
  34. //采用count进行元素出现统计
  35. std::cout << "Number elements in c1 that match 1 = " << c1.count(1) << std::endl ;
  36. //采用find进行元素查找
  37. std::multiset<int>::const_iterator constIter = c1.find(3) ;
  38. if(constIter != c1.end())
  39. {std::cout << "c1 contains element 3, *constIter = " << *constIter << std::endl ;}
  40. //采用max_size返回c1最大元素数量
  41. std::cout << "c1.max_size() = " << c1.max_size() << std::endl ;
  42. //采用size返回c1元素数量
  43. std::cout << "c1.size() = " << c1.size() << std::endl ;
  44. //采用swap进行c1和c2的元素交换
  45. c1.insert(4) ;
  46. c2.swap(c1) ;
  47. std::cout << "The last element of c2 = " << *(c2.rbegin())<< std::endl ;
  48. //采用clear进行c1对象清除
  49. c1.clear() ;
  50. std::cout << "After calling c1.clear(), c1.size() = " << c1.size() << std::endl ;
  51. //采用get_allocator返回内存分配器
  52. std::multiset<int>::allocator_type a1 = c1.get_allocator() ;
  53. //采用key_compare进行键值比较
  54. std::multiset<int>::key_compare kc = c2.key_comp() ;
  55. bool result = kc(2, 3) ;
  56. if(result == true)
  57. {std::cout << "kc is function object used by c2.  kc(2,3) = true" << std::endl ; }
  58. else
  59. {std::cout << "kc is function object used by c2.  kc(2,3) = false" << std::endl ; }
  60. //采用value_comp进行实值比较
  61. std::multiset<int>::value_compare vc = c2.value_comp() ;
  62. result = vc(10, 4) ;
  63. if(result == true)
  64. {std::cout << "vc is function object used by c2.  vc(10,4) = true" << std::endl ; }
  65. else
  66. { std::cout << "vc is function object used by c2.  vc(10,4) = false" << std::endl ; }
  67. //采用upper_bound返回上迭代器
  68. std::cout << "* (c2.upper_bound(3)) = " << *(c2.upper_bound(3)) << std::endl ;
  69. //采用lower_bound返回低迭代器
  70. std::cout << "* (c2.lower_bound(3)) = "<< *(c2.lower_bound(3)) << std::endl ;
  71. //采用equal_range返回当前元素的上下迭代器
  72. std::pair<std::multiset<int>::const_iterator, std::multiset<int>::const_iterator> pr1 = c2.equal_range(3) ;
  73. std::cout << "*(pr1.first) = " << *(pr1.first) << "t" 
  74. << "*(pr1.second) = " << *(pr1.second) << std::endl ;
  75. //采用erase进行元素删除
  76. if(c3.erase(1) != 0)
  77. { std::cout << "c3 does not contain 1 any more" << std::endl ; }
  78. else
  79. { std::cout << "No elements in c3 match key 1" << std::endl ; }
  80. if((c2.erase(c2.begin())) != c2.end())
  81. { std::cout << "c2 does not contain 0 any more" << std::endl ; }
  82. else
  83. { std::cout << "No elements in c2 match key 0" << std::endl ; }
  84. c3.erase(c3.begin(), c3.end()) ;
  85. std::cout << "after c3.erase(c3.begin(), c3.end()), c3.size() = " 
  86. << c3.size() << std::endl ;
  87. return 0 ;
  88. }