1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <set> 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// class set 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// iterator erase(const_iterator first, const_iterator last); 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <set> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 19061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 2070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main() 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef std::set<int> M; 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef int V; 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef M::iterator I; 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant V ar[] = 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1, 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 2, 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 3, 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 4, 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 5, 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 6, 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 7, 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 8 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant }; 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant M m(ar, ar + sizeof(ar)/sizeof(ar[0])); 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m.size() == 8); 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant I i = m.erase(next(m.cbegin(), 5), next(m.cbegin(), 5)); 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m.size() == 8); 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i == next(m.begin(), 5)); 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 0) == 1); 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 1) == 2); 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 2) == 3); 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 3) == 4); 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 4) == 5); 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 5) == 6); 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 6) == 7); 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 7) == 8); 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant i = m.erase(next(m.cbegin(), 3), next(m.cbegin(), 4)); 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m.size() == 7); 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i == next(m.begin(), 3)); 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 0) == 1); 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 1) == 2); 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 2) == 3); 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 3) == 5); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 4) == 6); 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 5) == 7); 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 6) == 8); 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant i = m.erase(next(m.cbegin(), 2), next(m.cbegin(), 5)); 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m.size() == 4); 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i == next(m.begin(), 2)); 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 0) == 1); 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 1) == 2); 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 2) == 7); 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 3) == 8); 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant i = m.erase(next(m.cbegin(), 0), next(m.cbegin(), 2)); 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m.size() == 2); 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i == next(m.begin(), 0)); 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 0) == 7); 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(*next(m.begin(), 1) == 8); 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant i = m.erase(m.cbegin(), m.cend()); 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(m.size() == 0); 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant assert(i == m.end()); 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 8170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant#if __cplusplus >= 201103L 8270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant { 8370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant typedef std::set<int, std::less<int>, min_allocator<int>> M; 8470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant typedef int V; 8570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant typedef M::iterator I; 8670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant V ar[] = 8770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant { 8870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 1, 8970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 2, 9070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 3, 9170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 4, 9270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 5, 9370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 6, 9470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 7, 9570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 8 9670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant }; 9770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant M m(ar, ar + sizeof(ar)/sizeof(ar[0])); 9870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m.size() == 8); 9970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant I i = m.erase(next(m.cbegin(), 5), next(m.cbegin(), 5)); 10070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m.size() == 8); 10170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(i == next(m.begin(), 5)); 10270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 0) == 1); 10370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 1) == 2); 10470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 2) == 3); 10570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 3) == 4); 10670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 4) == 5); 10770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 5) == 6); 10870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 6) == 7); 10970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 7) == 8); 11070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 11170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant i = m.erase(next(m.cbegin(), 3), next(m.cbegin(), 4)); 11270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m.size() == 7); 11370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(i == next(m.begin(), 3)); 11470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 0) == 1); 11570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 1) == 2); 11670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 2) == 3); 11770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 3) == 5); 11870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 4) == 6); 11970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 5) == 7); 12070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 6) == 8); 12170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 12270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant i = m.erase(next(m.cbegin(), 2), next(m.cbegin(), 5)); 12370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m.size() == 4); 12470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(i == next(m.begin(), 2)); 12570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 0) == 1); 12670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 1) == 2); 12770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 2) == 7); 12870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 3) == 8); 12970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 13070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant i = m.erase(next(m.cbegin(), 0), next(m.cbegin(), 2)); 13170342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m.size() == 2); 13270342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(i == next(m.begin(), 0)); 13370342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 0) == 7); 13470342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(*next(m.begin(), 1) == 8); 13570342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant 13670342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant i = m.erase(m.cbegin(), m.cend()); 13770342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(m.size() == 0); 13870342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant assert(i == m.end()); 13970342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant } 14070342b99e227912742972b754ad86e75c5d7eefbHoward Hinnant#endif 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 142