如何清除boost :: iterator_range

时间:2018-04-01 01:50:04

标签: c++ boost iterator range

我将指针 p 指向指向矢量的boost::iterator范围。我清除了底层矢量。由于清除了基础向量,boost::iterator范围的迭代器对无效boost::iterator_range没有清除功能。

如何清除boost::iterator范围?

  

p-> begin()= p-> end()

导致p.empty()返回 true

1 个答案:

答案 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