我有指向 boost::iterator
范围的指针 p 指向一个 vector 。我清除了底层 vector 。由于底层 vector 被清除,boost::iterator
范围的迭代器对无效。 boost::iterator_range
没有clear 函数。
如何清除 boost::iterator
范围?
p->begin() = p->end()
不会导致 p.empty()
返回 true
最佳答案
使用范围 [end(), end())
实际上会使 empty()
返回 true。但是,您也可以只分配一个默认构造的迭代器范围:
*p = {};
下面是各种方法的现场演示:
#include <boost/range/iterator_range.hpp>
#include <vector>
#include <iostream>
int main() {
std::vector<int> is { 1,2,3 };
auto range = boost::make_iterator_range(is.begin(), is.end());
std::cout << "range empty? " << std::boolalpha << range.empty() << "\n";
range = boost::make_iterator_range(is.end(), is.end());
std::cout << "range empty? " << std::boolalpha << range.empty() << "\n";
is.clear();
range = {};
std::cout << "range empty? " << std::boolalpha << range.empty() << "\n";
}
打印
range empty? false
range empty? true
range empty? true
关于c++ - 如何清除 boost::iterator_range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49594071/