我将指针 p 指向指向矢量的boost::iterator
范围。我清除了底层矢量。由于清除了基础向量,boost::iterator
范围的迭代器对无效。 boost::iterator_range
没有清除功能。
如何清除boost::iterator
范围?
p-> begin()= p-> end()
导致p.empty()
返回 true
答案 0 :(得分:1)
使用范围[end(), end())
实际上会使empty()
返回true。但是,您也可以只分配一个默认的构造迭代器范围:
*p = {};
以下是各种方法的现场演示:
<强> Live On Coliru 强>
#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