c++ - 如何清除 boost::iterator_range

标签 c++ boost iterator range

我有指向 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 = {};

下面是各种方法的现场演示:

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

关于c++ - 如何清除 boost::iterator_range,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49594071/

相关文章:

c++ - 使用 boost-python 将参数从 Python 脚本传递到 C++

java - 二叉树的中序迭代器 - java

c++ - 避免虚函数的标准方法

c++ - OpenGL 白色空白屏幕且无响应

C++:格式化包含十六进制值的字符串

error-handling - 在将filter_map与易错的映射功能一起使用时,如何汇总错误的迭代器?

java - 迭代Hashmap时更新不同的项目

c++ - 在同一项目中混合使用 C++ 风格

c++ - 互斥作为类成员

c++ - 如何使用 Boost::Asio 访问 Web 服务?